From 5a7f838ff297776fe398134a28f721e018efbfe1 Mon Sep 17 00:00:00 2001
From: Thorsten Brehm <brehm@patagonia.southamerica>
Date: Mon, 27 Sep 2010 23:48:20 +0200
Subject: [PATCH 01/45] Fixed all type-casts violating the strict-aliasing
 rule. => Removes compiler warnings and optimization problems.

---
 src/MultiPlayer/multiplaymgr.cxx | 36 +++++++++--------
 src/Network/generic.cxx          | 69 ++++++++++++++++----------------
 2 files changed, 55 insertions(+), 50 deletions(-)

diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx
index 7574332b2..508d96317 100644
--- a/src/MultiPlayer/multiplaymgr.cxx
+++ b/src/MultiPlayer/multiplaymgr.cxx
@@ -462,38 +462,38 @@ union FGMultiplayMgr::MsgBuf
 {
     MsgBuf()
     {
-        memset(&Msg, 0, sizeof(Msg));
+        memset(&Msg.Raw, 0, sizeof(Msg));
     }
 
     T_MsgHdr* msgHdr()
     {
-        return reinterpret_cast<T_MsgHdr*>(Msg);
+        return &Msg.Header;
     }
 
     const T_MsgHdr* msgHdr() const
     {
-        return reinterpret_cast<const T_MsgHdr*>(Msg);
+        return reinterpret_cast<const T_MsgHdr*>(&Msg.Header);
     }
 
     T_PositionMsg* posMsg()
     {
-        return reinterpret_cast<T_PositionMsg*>(Msg + sizeof(T_MsgHdr));
+        return reinterpret_cast<T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr));
     }
 
     const T_PositionMsg* posMsg() const
     {
-        return reinterpret_cast<const T_PositionMsg*>(Msg + sizeof(T_MsgHdr));
+        return reinterpret_cast<const T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr));
     }
 
     xdr_data_t* properties()
     {
-        return reinterpret_cast<xdr_data_t*>(Msg + sizeof(T_MsgHdr)
+        return reinterpret_cast<xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr)
                                              + sizeof(T_PositionMsg));
     }
 
     const xdr_data_t* properties() const
     {
-        return reinterpret_cast<const xdr_data_t*>(Msg + sizeof(T_MsgHdr)
+        return reinterpret_cast<const xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr)
                                                    + sizeof(T_PositionMsg));
     }
     /**
@@ -501,12 +501,12 @@ union FGMultiplayMgr::MsgBuf
      */
     xdr_data_t* propsEnd()
     {
-        return reinterpret_cast<xdr_data_t*>(Msg + MAX_PACKET_SIZE);
+        return reinterpret_cast<xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE);
     };
 
     const xdr_data_t* propsEnd() const
     {
-        return reinterpret_cast<const xdr_data_t*>(Msg + MAX_PACKET_SIZE);
+        return reinterpret_cast<const xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE);
     };
     /**
      * The end of properties actually in the buffer. This assumes that
@@ -514,16 +514,20 @@ union FGMultiplayMgr::MsgBuf
      */
     xdr_data_t* propsRecvdEnd()
     {
-        return reinterpret_cast<xdr_data_t*>(Msg + msgHdr()->MsgLen);
+        return reinterpret_cast<xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen);
     }
 
     const xdr_data_t* propsRecvdEnd() const
     {
-        return reinterpret_cast<const xdr_data_t*>(Msg + msgHdr()->MsgLen);
+        return reinterpret_cast<const xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen);
     }
     
     xdr_data2_t double_val;
-    char Msg[MAX_PACKET_SIZE];
+    union
+    {
+      char Raw[MAX_PACKET_SIZE];
+      T_MsgHdr Header;
+    } Msg;
 };
 
 void
@@ -654,9 +658,9 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo)
     ++it;
   }
 escape:
-  unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg;
+  unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg.Raw;
   FillMsgHdr(msgBuf.msgHdr(), POS_DATA_ID, msgLen);
-  mSocket->sendto(msgBuf.Msg, msgLen, 0, &mServer);
+  mSocket->sendto(msgBuf.Msg.Raw, msgLen, 0, &mServer);
   SG_LOG(SG_NETWORK, SG_DEBUG, "FGMultiplayMgr::SendMyPosition");
 } // FGMultiplayMgr::SendMyPosition()
 
@@ -731,7 +735,7 @@ FGMultiplayMgr::Update(void)
     //  packet waiting to be processed.
     //////////////////////////////////////////////////
     netAddress SenderAddress;
-    bytes = mSocket->recvfrom(msgBuf.Msg, sizeof(msgBuf.Msg), 0,
+    bytes = mSocket->recvfrom(msgBuf.Msg.Raw, sizeof(msgBuf.Msg.Raw), 0,
                               &SenderAddress);
     //////////////////////////////////////////////////
     //  no Data received
@@ -975,7 +979,7 @@ FGMultiplayMgr::ProcessChatMsg(const MsgBuf& Msg,
   
   char *chatStr = new char[MsgHdr->MsgLen - sizeof(T_MsgHdr)];
   const T_ChatMsg* ChatMsg
-      = reinterpret_cast<const T_ChatMsg *>(Msg.Msg + sizeof(T_MsgHdr));
+      = reinterpret_cast<const T_ChatMsg *>(Msg.Msg.Raw + sizeof(T_MsgHdr));
   strncpy(chatStr, ChatMsg->Text,
           MsgHdr->MsgLen - sizeof(T_MsgHdr));
   chatStr[MsgHdr->MsgLen - sizeof(T_MsgHdr) - 1] = '\0';
diff --git a/src/Network/generic.cxx b/src/Network/generic.cxx
index 423d2be18..9ab7d7699 100644
--- a/src/Network/generic.cxx
+++ b/src/Network/generic.cxx
@@ -95,20 +95,20 @@ bool FGGeneric::gen_message_binary() {
 
         switch (_out_message[i].type) {
         case FG_INT:
+        {
             val = _out_message[i].offset +
                   _out_message[i].prop->getIntValue() * _out_message[i].factor;
-
-            if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) {
-                *((int32_t*)&buf[length]) = (int32_t)val;
-            } else {
-                *((uint32_t*)&buf[length]) = sg_bswap_32((uint32_t)val);
+            int32_t intVal = val;
+            if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) {
+                intVal = (int32_t) sg_bswap_32((uint32_t)intVal);
             }
+            memcpy(&buf[length], &intVal, sizeof(int32_t));
             length += sizeof(int32_t);
             break;
+        }
 
         case FG_BOOL:
-            *((int8_t*)&buf[length])
-                      = _out_message[i].prop->getBoolValue() ? true : false;
+            buf[length] = (char) (_out_message[i].prop->getBoolValue() ? true : false);
             length += 1;
             break;
 
@@ -117,46 +117,48 @@ bool FGGeneric::gen_message_binary() {
             val = _out_message[i].offset +
                  _out_message[i].prop->getFloatValue() * _out_message[i].factor;
 
-            int fixed = (int)(val * 65536.0f); 
-            if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) {
-                *((int32_t*)&buf[length]) = (int32_t)fixed;
-            } else {
-                *((uint32_t*)&buf[length]) = sg_bswap_32((uint32_t)fixed);
+            int32_t fixed = (int)(val * 65536.0f);
+            if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) {
+                fixed = (int32_t) sg_bswap_32((uint32_t)fixed);
             } 
+            memcpy(&buf[length], &fixed, sizeof(int32_t));
             length += sizeof(int32_t);
             break;
         }
+
         case FG_FLOAT:
+        {
             val = _out_message[i].offset +
                  _out_message[i].prop->getFloatValue() * _out_message[i].factor;
+            u32 tmpun32;
+            tmpun32.floatVal = static_cast<float>(val);
 
-            if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) {
-                *((float*)&buf[length]) = val;
-            } else {
-                u32 tmpun32;
-                tmpun32.floatVal = static_cast<float>(val);
-                *((uint32_t*)&buf[length]) = sg_bswap_32(tmpun32.intVal);
+            if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) {
+                tmpun32.intVal = sg_bswap_32(tmpun32.intVal);
             }
+            memcpy(&buf[length], &tmpun32.intVal, sizeof(uint32_t));
             length += sizeof(uint32_t);
             break;
+        }
 
         case FG_DOUBLE:
+        {
             val = _out_message[i].offset +
                  _out_message[i].prop->getFloatValue() * _out_message[i].factor;
+            u64 tmpun64;
+            tmpun64.doubleVal = val;
 
-            if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) {
-                *((double*)&buf[length]) = val;
-            } else {
-                u64 tmpun64;
-                tmpun64.doubleVal = val;
-                *((uint64_t*)&buf[length]) = sg_bswap_64(tmpun64.longVal);
+            if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) {
+                tmpun64.longVal = sg_bswap_64(tmpun64.longVal);
             }
-            length += sizeof(int64_t);
+            memcpy(&buf[length], &tmpun64.longVal, sizeof(uint64_t));
+            length += sizeof(uint64_t);
             break;
+        }
 
         default: // SG_STRING
             const char *strdata = _out_message[i].prop->getStringValue();
-            int strlength = strlen(strdata);
+            int32_t strlength = strlen(strdata);
 
             if (binary_byte_order == BYTE_ORDER_NEEDS_CONVERSION) {
                 SG_LOG( SG_IO, SG_ALERT, "Generic protocol: "
@@ -165,11 +167,10 @@ bool FGGeneric::gen_message_binary() {
             /* Format for strings is 
              * [length as int, 4 bytes][ASCII data, length bytes]
              */
-            if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) {
-                *((int32_t*)&buf[length]) = strlength;
-            } else {
-                *((int32_t*)&buf[length]) = sg_bswap_32(strlength);
+            if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) {
+                strlength = sg_bswap_32(strlength);
             }
+            memcpy(&buf[length], &strlength, sizeof(int32_t));
             length += sizeof(int32_t);
             strncpy(&buf[length], strdata, strlength);
             length += strlength; 
@@ -191,11 +192,11 @@ bool FGGeneric::gen_message_binary() {
     }
 
     if (binary_footer_type != FOOTER_NONE) {
-        if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) {
-            *((int32_t*)&buf[length]) = binary_footer_value;
-        } else {
-            *((int32_t*)&buf[length]) = sg_bswap_32(binary_footer_value);
+        int32_t intValue = binary_footer_value;
+        if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) {
+            intValue = sg_bswap_32(binary_footer_value);
         }
+        memcpy(&buf[length], &intValue, sizeof(int32_t));
         length += sizeof(int32_t);
     }
 

From c71fcbf10d5e436e028cbe748f12934b52be6526 Mon Sep 17 00:00:00 2001
From: Thorsten Brehm <brehm@patagonia.southamerica>
Date: Tue, 28 Sep 2010 08:50:54 +0200
Subject: [PATCH 02/45] Simplified pointer-aliasing patch.

Removed introduction of a new union and reused existing one.
---
 src/MultiPlayer/multiplaymgr.cxx | 37 +++++++++++++++-----------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx
index 508d96317..00b75e01a 100644
--- a/src/MultiPlayer/multiplaymgr.cxx
+++ b/src/MultiPlayer/multiplaymgr.cxx
@@ -462,38 +462,38 @@ union FGMultiplayMgr::MsgBuf
 {
     MsgBuf()
     {
-        memset(&Msg.Raw, 0, sizeof(Msg));
+        memset(&Msg, 0, sizeof(Msg));
     }
 
     T_MsgHdr* msgHdr()
     {
-        return &Msg.Header;
+        return &Header;
     }
 
     const T_MsgHdr* msgHdr() const
     {
-        return reinterpret_cast<const T_MsgHdr*>(&Msg.Header);
+        return reinterpret_cast<const T_MsgHdr*>(&Header);
     }
 
     T_PositionMsg* posMsg()
     {
-        return reinterpret_cast<T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr));
+        return reinterpret_cast<T_PositionMsg*>(Msg + sizeof(T_MsgHdr));
     }
 
     const T_PositionMsg* posMsg() const
     {
-        return reinterpret_cast<const T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr));
+        return reinterpret_cast<const T_PositionMsg*>(Msg + sizeof(T_MsgHdr));
     }
 
     xdr_data_t* properties()
     {
-        return reinterpret_cast<xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr)
+        return reinterpret_cast<xdr_data_t*>(Msg + sizeof(T_MsgHdr)
                                              + sizeof(T_PositionMsg));
     }
 
     const xdr_data_t* properties() const
     {
-        return reinterpret_cast<const xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr)
+        return reinterpret_cast<const xdr_data_t*>(Msg + sizeof(T_MsgHdr)
                                                    + sizeof(T_PositionMsg));
     }
     /**
@@ -501,12 +501,12 @@ union FGMultiplayMgr::MsgBuf
      */
     xdr_data_t* propsEnd()
     {
-        return reinterpret_cast<xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE);
+        return reinterpret_cast<xdr_data_t*>(Msg + MAX_PACKET_SIZE);
     };
 
     const xdr_data_t* propsEnd() const
     {
-        return reinterpret_cast<const xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE);
+        return reinterpret_cast<const xdr_data_t*>(Msg + MAX_PACKET_SIZE);
     };
     /**
      * The end of properties actually in the buffer. This assumes that
@@ -514,20 +514,17 @@ union FGMultiplayMgr::MsgBuf
      */
     xdr_data_t* propsRecvdEnd()
     {
-        return reinterpret_cast<xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen);
+        return reinterpret_cast<xdr_data_t*>(Msg + Header.MsgLen);
     }
 
     const xdr_data_t* propsRecvdEnd() const
     {
-        return reinterpret_cast<const xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen);
+        return reinterpret_cast<const xdr_data_t*>(Msg + Header.MsgLen);
     }
     
     xdr_data2_t double_val;
-    union
-    {
-      char Raw[MAX_PACKET_SIZE];
-      T_MsgHdr Header;
-    } Msg;
+    char Msg[MAX_PACKET_SIZE];
+    T_MsgHdr Header;
 };
 
 void
@@ -658,9 +655,9 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo)
     ++it;
   }
 escape:
-  unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg.Raw;
+  unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg;
   FillMsgHdr(msgBuf.msgHdr(), POS_DATA_ID, msgLen);
-  mSocket->sendto(msgBuf.Msg.Raw, msgLen, 0, &mServer);
+  mSocket->sendto(msgBuf.Msg, msgLen, 0, &mServer);
   SG_LOG(SG_NETWORK, SG_DEBUG, "FGMultiplayMgr::SendMyPosition");
 } // FGMultiplayMgr::SendMyPosition()
 
@@ -735,7 +732,7 @@ FGMultiplayMgr::Update(void)
     //  packet waiting to be processed.
     //////////////////////////////////////////////////
     netAddress SenderAddress;
-    bytes = mSocket->recvfrom(msgBuf.Msg.Raw, sizeof(msgBuf.Msg.Raw), 0,
+    bytes = mSocket->recvfrom(msgBuf.Msg, sizeof(msgBuf.Msg), 0,
                               &SenderAddress);
     //////////////////////////////////////////////////
     //  no Data received
@@ -979,7 +976,7 @@ FGMultiplayMgr::ProcessChatMsg(const MsgBuf& Msg,
   
   char *chatStr = new char[MsgHdr->MsgLen - sizeof(T_MsgHdr)];
   const T_ChatMsg* ChatMsg
-      = reinterpret_cast<const T_ChatMsg *>(Msg.Msg.Raw + sizeof(T_MsgHdr));
+      = reinterpret_cast<const T_ChatMsg *>(Msg.Msg + sizeof(T_MsgHdr));
   strncpy(chatStr, ChatMsg->Text,
           MsgHdr->MsgLen - sizeof(T_MsgHdr));
   chatStr[MsgHdr->MsgLen - sizeof(T_MsgHdr) - 1] = '\0';

From 84b45683fc1349a8c94bb452732422bdc9f6b037 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 29 Sep 2010 21:04:11 +0100
Subject: [PATCH 03/45] Refactor exit code, so the osgViewer gets 'done'.

---
 src/Main/bootstrap.cxx       |  2 ++
 src/Main/fg_commands.cxx     |  3 ++-
 src/Main/fg_os.hxx           |  2 +-
 src/Main/fg_os_osgviewer.cxx |  5 +++--
 src/Main/main.cxx            | 15 +++++++++------
 src/Main/main.hxx            |  2 +-
 src/Main/util.cxx            | 13 -------------
 src/Main/util.hxx            | 11 -----------
 src/Network/generic.cxx      |  4 ++--
 9 files changed, 20 insertions(+), 37 deletions(-)

diff --git a/src/Main/bootstrap.cxx b/src/Main/bootstrap.cxx
index 8a360206e..fb95b8f19 100644
--- a/src/Main/bootstrap.cxx
+++ b/src/Main/bootstrap.cxx
@@ -241,6 +241,8 @@ int main ( int argc, char **argv ) {
             fgviewerMain(argc, argv);
         else
             fgMainInit(argc, argv);
+            
+        
     } catch (const sg_throwable &t) {
                             // We must use cerr rather than
                             // logging, since logging may be
diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx
index 354a92bc0..1fe2c4ce4 100644
--- a/src/Main/fg_commands.cxx
+++ b/src/Main/fg_commands.cxx
@@ -211,7 +211,8 @@ do_exit (const SGPropertyNode * arg)
             SG_LOG(SG_INPUT, SG_DEBUG, "Finished Saving user settings");
         }
     }
-    fgExit(arg->getIntValue("status", 0));
+    
+    fgOSExit(arg->getIntValue("status", 0));
     return true;
 }
 
diff --git a/src/Main/fg_os.hxx b/src/Main/fg_os.hxx
index 62f6f8f7d..ebeb0701b 100644
--- a/src/Main/fg_os.hxx
+++ b/src/Main/fg_os.hxx
@@ -60,7 +60,7 @@ enum { KEYMOD_NONE     = 0,
 void fgOSInit(int* argc, char** argv);
 void fgOSOpenWindow(bool stencil);
 void fgOSFullScreen();
-void fgOSMainLoop();
+int fgOSMainLoop();
 void fgOSExit(int code);
 
 void fgSetMouseCursor(int cursor);
diff --git a/src/Main/fg_os_osgviewer.cxx b/src/Main/fg_os_osgviewer.cxx
index a03cc747e..726c868a9 100644
--- a/src/Main/fg_os_osgviewer.cxx
+++ b/src/Main/fg_os_osgviewer.cxx
@@ -271,7 +271,7 @@ void fgOSExit(int code)
     status = code;
 }
 
-void fgOSMainLoop()
+int fgOSMainLoop()
 {
     ref_ptr<FGEventHandler> manipulator
         = globals->get_renderer()->getEventHandler();
@@ -287,7 +287,8 @@ void fgOSMainLoop()
             (*drawFunc)();
         viewer->frame();
     }
-    fgExit(status);
+    
+    return status;
 }
 
 int fgGetKeyModifiers()
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 894dd0010..b9c0f194f 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -576,7 +576,7 @@ static void upper_case_property(const char *name)
 
 
 // Main top level initialization
-bool fgMainInit( int argc, char **argv ) {
+int fgMainInit( int argc, char **argv ) {
 
     // set default log levels
     sglog().setLogLevels( SG_ALL, SG_ALERT );
@@ -660,11 +660,14 @@ bool fgMainInit( int argc, char **argv ) {
     fgSplashInit();
 
     // pass control off to the master event handler
-    fgOSMainLoop();
-
-    // we never actually get here ... but to avoid compiler warnings,
-    // etc.
-    return false;
+    int result = fgOSMainLoop();
+    
+    // clean up here; ensure we null globals to avoid
+    // confusing the atexit() handler
+    delete globals;
+    globals = NULL;
+    
+    return result;
 }
 
 
diff --git a/src/Main/main.hxx b/src/Main/main.hxx
index 2117f605b..115b3c628 100644
--- a/src/Main/main.hxx
+++ b/src/Main/main.hxx
@@ -4,7 +4,7 @@
 
 void fgUpdateTimeDepCalcs();
 
-bool fgMainInit( int argc, char **argv );
+int fgMainInit( int argc, char **argv );
 
 
 extern int idle_state;
diff --git a/src/Main/util.cxx b/src/Main/util.cxx
index 0986e91ea..7c20530a3 100644
--- a/src/Main/util.cxx
+++ b/src/Main/util.cxx
@@ -105,19 +105,6 @@ fgSetupWind (double min_hdg, double max_hdg, double speed, double gust)
               speed);
 }
 
-
-void
-fgExit (int status)
-{
-#ifdef OSG_LIBRARY_STATIC
-    osgDB::Registry::instance( true);
-#endif
-
-    SG_LOG(SG_GENERAL, SG_INFO, "Exiting FlightGear with status " << status);
-    std::exit(status);
-}
-
-
 // Originally written by Alex Perry.
 double
 fgGetLowPass (double current, double target, double timeratio)
diff --git a/src/Main/util.hxx b/src/Main/util.hxx
index 70067d3e3..dcd75b130 100644
--- a/src/Main/util.hxx
+++ b/src/Main/util.hxx
@@ -49,17 +49,6 @@ extern void fgDefaultWeatherValue (const char * propname, double value);
 extern void fgSetupWind (double min_hdg, double max_hdg,
                          double speed, double gust);
 
-/**
- * Clean up and exit FlightGear.
- *
- * This function makes sure that network connections and I/O streams
- * are cleaned up.
- *
- * @param status The exit status to pass to the operating system.
- */
-extern void fgExit (int status = 0);
-
-
 /**
  * Move a value towards a target.
  *
diff --git a/src/Network/generic.cxx b/src/Network/generic.cxx
index 423d2be18..034a94fa6 100644
--- a/src/Network/generic.cxx
+++ b/src/Network/generic.cxx
@@ -37,8 +37,8 @@
 
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
+#include <Main/fg_os.hxx>
 #include <Main/util.hxx>
-
 #include "generic.hxx"
 
 
@@ -490,7 +490,7 @@ bool FGGeneric::process() {
     return true;
 error_out:
     if (exitOnError) {
-        fgExit(1);
+        fgOSExit(1);
         return true; // should not get there, but please the compiler
     } else
         return false;

From af4e47179edfacdcad6a49d413e14d71df0ac22d Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 29 Sep 2010 22:03:57 +0100
Subject: [PATCH 04/45] Kill off fgRequestRedraw

---
 src/Main/fg_os.hxx        | 2 --
 src/Main/fg_os_common.cxx | 4 ----
 src/Main/main.cxx         | 1 -
 src/Main/splash.cxx       | 2 --
 4 files changed, 9 deletions(-)

diff --git a/src/Main/fg_os.hxx b/src/Main/fg_os.hxx
index ebeb0701b..74d2e468b 100644
--- a/src/Main/fg_os.hxx
+++ b/src/Main/fg_os.hxx
@@ -69,8 +69,6 @@ void fgWarpMouse(int x, int y);
 
 int  fgGetKeyModifiers();
 
-void fgRequestRedraw();
-
 //
 // Callbacks and registration API
 //
diff --git a/src/Main/fg_os_common.cxx b/src/Main/fg_os_common.cxx
index 91041c3cc..1df935139 100644
--- a/src/Main/fg_os_common.cxx
+++ b/src/Main/fg_os_common.cxx
@@ -64,9 +64,5 @@ void fgRegisterMouseMotionHandler(fgMouseMotionHandler func)
     globals->get_renderer()->getEventHandler()->setMouseMotionHandler(func);
 }
 
-// Redraw "happens" every frame whether you want it or not.
-void fgRequestRedraw()
-{
-}
 
 
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index b9c0f194f..03637612e 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -238,7 +238,6 @@ static void fgMainLoop( void ) {
               SGRawValueFunctions<const char *>(0, fgSetNewSoundDevice), false);
     }
     simgear::AtomicChangeListener::fireChangeListeners();
-    fgRequestRedraw();
 
     SG_LOG( SG_ALL, SG_DEBUG, "" );
 }
diff --git a/src/Main/splash.cxx b/src/Main/splash.cxx
index 19b123488..9152fb26d 100644
--- a/src/Main/splash.cxx
+++ b/src/Main/splash.cxx
@@ -355,11 +355,9 @@ osg::Node* fgCreateSplashNode() {
 void fgSplashInit () {
   SG_LOG( SG_GENERAL, SG_INFO, "Initializing splash screen" );
   globals->get_renderer()->splashinit();
-  fgRequestRedraw();
 }
 
 void fgSplashProgress ( const char *text ) {
   SG_LOG( SG_GENERAL, SG_INFO, "Splash screen progress " << text );
   fgSetString("/sim/startup/splash-progress-text", text);
-  fgRequestRedraw();
 }

From 1afd4e602ee4e949cf651d50169e6a15700bd96b Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Fri, 1 Oct 2010 09:33:31 +0100
Subject: [PATCH 05/45] Get rid of FGGeneral; expose equivlanet values via
 properties.

---
 src/Cockpit/cockpit.cxx         |  4 +---
 src/GUI/gui.cxx                 |  1 -
 src/Instrumentation/wxradar.cxx |  1 -
 src/Main/fg_init.cxx            |  1 -
 src/Main/fg_os_osgviewer.cxx    |  1 -
 src/Main/main.cxx               | 26 ++++++++++++--------------
 src/Main/renderer.cxx           |  1 -
 7 files changed, 13 insertions(+), 22 deletions(-)

diff --git a/src/Cockpit/cockpit.cxx b/src/Cockpit/cockpit.cxx
index a2f542cbc..c8afc29c6 100644
--- a/src/Cockpit/cockpit.cxx
+++ b/src/Cockpit/cockpit.cxx
@@ -37,8 +37,6 @@
 #include <simgear/props/props.hxx>
 #include <simgear/timing/sg_time.hxx>
 
-#include <Include/general.hxx>
-
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
 #include <Main/viewmgr.hxx>
@@ -198,7 +196,7 @@ float get_sideslip( void )
 
 float get_frame_rate( void )
 {
-    return general.get_frame_rate();
+    return fgGetInt("/sim/frame-rate");
 }
 
 float get_fov( void )
diff --git a/src/GUI/gui.cxx b/src/GUI/gui.cxx
index 2e8305ba4..1ae94dbb0 100644
--- a/src/GUI/gui.cxx
+++ b/src/GUI/gui.cxx
@@ -39,7 +39,6 @@
 
 #include <plib/pu.h>
 
-#include <Include/general.hxx>
 #include <Main/main.hxx>
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
diff --git a/src/Instrumentation/wxradar.cxx b/src/Instrumentation/wxradar.cxx
index 8a27057fe..f32e12605 100644
--- a/src/Instrumentation/wxradar.cxx
+++ b/src/Instrumentation/wxradar.cxx
@@ -58,7 +58,6 @@ using std::setfill;
 #include <Cockpit/panel.hxx>
 #include <Cockpit/hud.hxx>
 
-#include <Include/general.hxx>
 #include "instrument_mgr.hxx"
 #include "od_gauge.hxx"
 #include "wxradar.hxx"
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index 7d1b82fd8..38c4d8ee5 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -88,7 +88,6 @@
 #include <Cockpit/panel_io.hxx>
 
 #include <GUI/new_gui.hxx>
-#include <Include/general.hxx>
 #include <Input/input.hxx>
 #include <Instrumentation/instrument_mgr.hxx>
 #include <Model/acmodel.hxx>
diff --git a/src/Main/fg_os_osgviewer.cxx b/src/Main/fg_os_osgviewer.cxx
index 726c868a9..26ecbd266 100644
--- a/src/Main/fg_os_osgviewer.cxx
+++ b/src/Main/fg_os_osgviewer.cxx
@@ -46,7 +46,6 @@
 #include <osgViewer/ViewerEventHandlers>
 #include <osgViewer/Viewer>
 
-#include <Include/general.hxx>
 #include <Scenery/scenery.hxx>
 #include "fg_os.hxx"
 #include "fg_props.hxx"
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 03637612e..2522e69dd 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -50,7 +50,6 @@
 #include <simgear/math/sg_random.h>
 
 #include <Time/light.hxx>
-#include <Include/general.hxx>
 #include <Aircraft/replay.hxx>
 #include <Cockpit/cockpit.hxx>
 #include <Cockpit/hud.hxx>
@@ -87,9 +86,6 @@ using namespace flightgear;
 
 using std::cerr;
 
-// This is a record containing a bit of global housekeeping information
-FGGeneral general;
-
 // Specify our current idle function state.  This is used to run all
 // our initializations out of the idle callback so that we can get a
 // splash screen up and running right away.
@@ -277,21 +273,23 @@ struct GeneralInitOperation : public GraphicsContextOperation
     }
     void run(osg::GraphicsContext* gc)
     {
-        general.set_glVendor( (char *)glGetString ( GL_VENDOR ) );
-        general.set_glRenderer( (char *)glGetString ( GL_RENDERER ) );
-        general.set_glVersion( (char *)glGetString ( GL_VERSION ) );
-        SG_LOG( SG_GENERAL, SG_INFO, general.get_glVendor() );
-        SG_LOG( SG_GENERAL, SG_INFO, general.get_glRenderer() );
-        SG_LOG( SG_GENERAL, SG_INFO, general.get_glVersion() );
+        SGPropertyNode* simRendering = fgGetNode("/sim/rendering");
+        
+        simRendering->setStringValue("gl-vendor", (char*) glGetString(GL_VENDOR));
+        SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VENDOR));
+        
+        simRendering->setStringValue("gl-renderer", (char*) glGetString(GL_RENDERER));
+        SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_RENDERER));
+        
+        simRendering->setStringValue("gl-version", (char*) glGetString(GL_VERSION));
+        SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VERSION));
 
         GLint tmp;
         glGetIntegerv( GL_MAX_TEXTURE_SIZE, &tmp );
-        general.set_glMaxTexSize( tmp );
-        SG_LOG ( SG_GENERAL, SG_INFO, "Max texture size = " << tmp );
+        simRendering->setIntValue("max-texture-size", tmp);
 
         glGetIntegerv( GL_DEPTH_BITS, &tmp );
-        general.set_glDepthBits( tmp );
-        SG_LOG ( SG_GENERAL, SG_INFO, "Depth buffer bits = " << tmp );
+        simRendering->setIntValue("depth-buffer-bits", tmp);
     }
 };
 
diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx
index a3d6d9886..0cb00c5ab 100644
--- a/src/Main/renderer.cxx
+++ b/src/Main/renderer.cxx
@@ -93,7 +93,6 @@
 #include <Instrumentation/HUD/HUD.hxx>
 #include <Environment/precipitation_mgr.hxx>
 
-#include <Include/general.hxx>
 #include "splash.hxx"
 #include "renderer.hxx"
 #include "main.hxx"

From 6963a6c2e42a734bf93e32152c59cbe451a59250 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Fri, 1 Oct 2010 09:35:37 +0100
Subject: [PATCH 06/45] Kill off the general.hxx header

---
 src/Include/Makefile.am |  3 +-
 src/Include/general.hxx | 85 -----------------------------------------
 2 files changed, 1 insertion(+), 87 deletions(-)
 delete mode 100644 src/Include/general.hxx

diff --git a/src/Include/Makefile.am b/src/Include/Makefile.am
index 395f635a6..d2b80e3bd 100644
--- a/src/Include/Makefile.am
+++ b/src/Include/Makefile.am
@@ -4,5 +4,4 @@ EXTRA_DIST = \
 	config.h-msvc71 \
 	config.h-msvc8 \
 	cmdargs.h \
-	fg_typedefs.h \
-	general.hxx
+	fg_typedefs.h 
\ No newline at end of file
diff --git a/src/Include/general.hxx b/src/Include/general.hxx
deleted file mode 100644
index c72f8031e..000000000
--- a/src/Include/general.hxx
+++ /dev/null
@@ -1,85 +0,0 @@
-// general.hxx -- a general house keeping data structure definition for 
-//                various info that might need to be accessible from all 
-//                parts of the sim.
-//
-// Written by Curtis Olson, started July 1997.
-//
-// Copyright (C) 1997  Curtis L. Olson  - http://www.flightgear.org/~curt
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 2 of the
-// License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-// $Id$
-
-
-#ifndef _GENERAL_HXX
-#define _GENERAL_HXX
-
-
-#ifndef __cplusplus                                                          
-# error This library requires C++
-#endif                                   
-
-#include <simgear/structure/OSGVersion.hxx>
-#define FG_OSG_VERSION SG_OSG_VERSION
-
-// #define FANCY_FRAME_COUNTER
-#ifdef FANCY_FRAME_COUNTER
-#define FG_FRAME_RATE_HISTORY 10
-#endif
-
-
-// the general house keeping structure definition
-class FGGeneral {
-    // Info about OpenGL
-    char *glVendor;
-    char *glRenderer;
-    char *glVersion;
-    int glMaxTexSize;
-    int glDepthBits;
-
-    // Last frame rate measurement
-    int frame_rate;
-#ifdef FANCY_FRAME_COUNTER
-    double frames[FG_FRAME_RATE_HISTORY];
-#endif
-
-public:
-    inline char* get_glVendor() { return glVendor; }
-    inline void set_glVendor( char *str ) { glVendor = str; }
-    inline char* get_glRenderer() const { return glRenderer; }
-    inline void set_glRenderer( char *str ) { glRenderer = str; }
-    inline char* get_glVersion() { return glVersion; }
-    inline void set_glVersion( char *str ) { glVersion = str; }
-    inline void set_glMaxTexSize( int i ) { glMaxTexSize = i; }
-    inline int get_glMaxTexSize() const { return glMaxTexSize; }
-    inline void set_glDepthBits( int d ) { glDepthBits = d; }
-    inline int get_glDepthBits() const { return glDepthBits; }
-    inline double get_frame_rate() const { return frame_rate; }
-#ifdef FANCY_FRAME_COUNTER
-    inline double get_frame(int idx) const { return frames[idx]; }
-    inline void set_frame( int idx, double value ) { frames[idx] = value; }
-    inline void set_frame_rate( double rate ) { frame_rate = rate; }
-#else
-    inline void set_frame_rate( int rate ) { frame_rate = rate; }
-#endif
-};
-
-// general contains all the general house keeping parameters.
-extern FGGeneral general;
-
-
-#endif // _GENERAL_HXX
-
-

From 0beab94cb5fec7c58015271658a6233260c25d02 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Fri, 1 Oct 2010 19:09:19 +0100
Subject: [PATCH 07/45] Make the tile-manager a well-behaved SGSubsystem

---
 src/AIModel/AIAircraft.cxx |   2 +-
 src/Main/fg_commands.cxx   |  14 +---
 src/Main/fg_init.cxx       |  14 +---
 src/Main/globals.cxx       |   1 -
 src/Main/main.cxx          |  13 ----
 src/Scenery/tilemgr.cxx    | 147 +++++++++++++++++--------------------
 src/Scenery/tilemgr.hxx    |  40 +++++-----
 7 files changed, 95 insertions(+), 136 deletions(-)

diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx
index 58db48478..f117810c1 100644
--- a/src/AIModel/AIAircraft.cxx
+++ b/src/AIModel/AIAircraft.cxx
@@ -421,7 +421,7 @@ void FGAIAircraft::getGroundElev(double dt) {
         double range = 500.0;
         if (!globals->get_tile_mgr()->scenery_available(pos, range)) {
             // Try to shedule tiles for that position.
-            globals->get_tile_mgr()->update( pos, range );
+            globals->get_tile_mgr()->schedule_tiles_at( pos, range );
         }
 
         double alt;
diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx
index 1fe2c4ce4..74551bc91 100644
--- a/src/Main/fg_commands.cxx
+++ b/src/Main/fg_commands.cxx
@@ -556,15 +556,9 @@ do_tile_cache_reload (const SGPropertyNode * arg)
     if ( !freeze ) {
 	fgSetBool("/sim/freeze/master", true);
     }
-    if ( globals->get_tile_mgr()->init() ) {
-	// Load the local scenery data
-        double visibility_meters = fgGetDouble("/environment/visibility-m");
-	globals->get_tile_mgr()->update( visibility_meters );
-    } else {
-	SG_LOG( SG_GENERAL, SG_ALERT, 
-		"Error in Tile Manager initialization!" );
-	exit(-1);
-    }
+
+    globals->get_subsystem("tile-manager")->reinit();
+
     if ( !freeze ) {
 	fgSetBool("/sim/freeze/master", false);
     }
@@ -1241,8 +1235,6 @@ do_presets_commit (const SGPropertyNode * arg)
 
     fgReInitSubsystems();
 
-    globals->get_tile_mgr()->update( fgGetDouble("/environment/visibility-m") );
-
 #if 0
     if ( ! fgGetBool("/sim/presets/onground") ) {
         fgSetBool( "/sim/freeze/master", true );
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index 38c4d8ee5..c62e96eaf 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -1321,14 +1321,8 @@ bool fgInitSubsystems() {
     // Initialize the scenery management subsystem.
     ////////////////////////////////////////////////////////////////////
 
-    if ( globals->get_tile_mgr()->init() ) {
-        // Load the local scenery data
-        double visibility_meters = fgGetDouble("/environment/visibility-m");
-        globals->get_tile_mgr()->update( visibility_meters );
-    } else {
-        SG_LOG( SG_GENERAL, SG_ALERT, "Error in Tile Manager initialization!" );
-        exit(-1);
-    }
+    globals->add_subsystem("tile-manager", globals->get_tile_mgr(), 
+      SGSubsystemMgr::DISPLAY);
 
     globals->get_scenery()->get_scene_graph()
         ->addChild(simgear::Particles::getCommonRoot());
@@ -1553,7 +1547,8 @@ void fgReInitSubsystems()
     globals->get_controls()->reset_all();
 
     globals->get_subsystem("time")->reinit();
-
+    globals->get_subsystem("tile-manager")->reinit();
+    
     if ( !freeze ) {
         fgSetBool("/sim/freeze/master", false);
     }
@@ -1580,7 +1575,6 @@ void doSimulatorReset(void)  // from gui_local.cxx -- TODO merge with fgReInitSu
 
     fgReInitSubsystems();
 
-    globals->get_tile_mgr()->update(fgGetDouble("/environment/visibility-m"));
     fgSetBool("/sim/signals/reinit", false);
 
     if (!freeze)
diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx
index 0bd14a3bc..c52c5e182 100644
--- a/src/Main/globals.cxx
+++ b/src/Main/globals.cxx
@@ -193,7 +193,6 @@ FGGlobals::~FGGlobals()
     delete model_mgr;
     delete channel_options_list;
     delete initial_waypoints;
-    delete tile_mgr;
     delete scenery;
     delete fontcache;
 
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 2522e69dd..294c39c92 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -159,19 +159,6 @@ static void fgMainLoop( void ) {
     
     globals->get_subsystem_mgr()->update(sim_dt);
     globals->get_aircraft_model()->update(sim_dt);
-    
-    //
-    // Tile Manager updates - see if we need to load any new scenery tiles.
-    //   this code ties together the fdm, viewer and scenery classes...
-    //   we may want to move this to its own class at some point
-    //
-    double visibility_meters = fgGetDouble("/environment/visibility-m");
-    globals->get_tile_mgr()->prep_ssg_nodes( visibility_meters );
-
-    // update tile manager for view...
-    SGVec3d viewPos = globals->get_current_view()->get_view_pos();
-    SGGeod geodViewPos = SGGeod::fromCart(viewPos);
-    globals->get_tile_mgr()->update(geodViewPos, visibility_meters);
 
     // run Nasal's settimer() loops right before the view manager
     globals->get_event_mgr()->update(sim_dt);
diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx
index e5cd08bbb..5abcf791d 100644
--- a/src/Scenery/tilemgr.cxx
+++ b/src/Scenery/tilemgr.cxx
@@ -67,7 +67,7 @@ FGTileMgr::~FGTileMgr() {
 
 
 // Initialize the Tile Manager subsystem
-int FGTileMgr::init() {
+void FGTileMgr::init() {
     SG_LOG( SG_TERRAIN, SG_INFO, "Initializing Tile Manager subsystem." );
 
     _options = new SGReaderWriterBTGOptions;
@@ -80,65 +80,75 @@ int FGTileMgr::init() {
     std::copy(sc.begin(), sc.end(), back_inserter(fp));
 
     TileEntry::setModelLoadHelper(this);
+    
+    _visibilityMeters = fgGetNode("/environment/visibility-m", true);
+    
 
-    tile_cache.init();
+    reinit();
+}
 
-    state = Inited;
 
-    previous_bucket.make_bad();
-    current_bucket.make_bad();
+void FGTileMgr::reinit()
+{
+  tile_cache.init();
+  
+  state = Inited;
 
-    longitude = latitude = -1000.0;
+  previous_bucket.make_bad();
+  current_bucket.make_bad();
+  longitude = latitude = -1000.0;
 
-    return 1;
+  // force an update now
+  update(0.0);
 }
 
 // schedule a tile for loading
 void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring ) {
     // see if tile already exists in the cache
     TileEntry *t = tile_cache.get_tile( b );
-
-    if ( !t ) {
-        // make space in the cache
-        SceneryPager* pager = FGScenery::getPagerSingleton();
-        while ( (int)tile_cache.get_size() > tile_cache.get_max_cache_size() ) {
-            long index = tile_cache.get_oldest_tile();
-            if ( index >= 0 ) {
-                TileEntry *old = tile_cache.get_tile( index );
-                tile_cache.clear_entry( index );
-                osg::ref_ptr<osg::Object> subgraph = old->getNode();
-                old->removeFromSceneGraph();
-                delete old;
-                // zeros out subgraph ref_ptr, so subgraph is owned by
-                // the pager and will be deleted in the pager thread.
-                pager->queueDeleteRequest(subgraph);
-            } else {
-                // nothing to free ?!? forge ahead
-                break;
-            }
-        }
-
-        // create a new entry
-        TileEntry *e = new TileEntry( b );
-
-        // insert the tile into the cache
-        if ( tile_cache.insert_tile( e ) ) {
-            // update_queues will generate load request
-        } else {
-            // insert failed (cache full with no available entries to
-            // delete.)  Try again later
-            delete e;
-        }
-        // Attach to scene graph
-        e->addToSceneGraph(globals->get_scenery()->get_terrain_branch());
-    } else {
-        t->set_inner_ring( is_inner_ring );
+    if (t) {
+      t->set_inner_ring( is_inner_ring );
+      return;
     }
+    
+    // make space in the cache
+    SceneryPager* pager = FGScenery::getPagerSingleton();
+    while ( (int)tile_cache.get_size() > tile_cache.get_max_cache_size() ) {
+        long index = tile_cache.get_oldest_tile();
+        if ( index >= 0 ) {
+            TileEntry *old = tile_cache.get_tile( index );
+            tile_cache.clear_entry( index );
+            osg::ref_ptr<osg::Object> subgraph = old->getNode();
+            old->removeFromSceneGraph();
+            delete old;
+            // zeros out subgraph ref_ptr, so subgraph is owned by
+            // the pager and will be deleted in the pager thread.
+            pager->queueDeleteRequest(subgraph);
+        } else {
+            // nothing to free ?!? forge ahead
+            break;
+        }
+    }
+
+    // create a new entry
+    TileEntry *e = new TileEntry( b );
+
+    // insert the tile into the cache
+    if ( tile_cache.insert_tile( e ) ) {
+        // update_queues will generate load request
+    } else {
+        // insert failed (cache full with no available entries to
+        // delete.)  Try again later
+        delete e;
+    }
+    // Attach to scene graph
+    e->addToSceneGraph(globals->get_scenery()->get_terrain_branch());
 }
 
 
 // schedule a needed buckets for loading
-void FGTileMgr::schedule_needed( double vis, const SGBucket& curr_bucket) {
+void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) {
+    
     // sanity check (unfortunately needed!)
     if ( longitude < -180.0 || longitude > 180.0 
          || latitude < -90.0 || latitude > 90.0 )
@@ -155,8 +165,6 @@ void FGTileMgr::schedule_needed( double vis, const SGBucket& curr_bucket) {
     SG_LOG( SG_TERRAIN, SG_INFO,
             "scheduling needed tiles for " << longitude << " " << latitude );
 
-    // vis = fgGetDouble("/environment/visibility-m");
-
     double tile_width = curr_bucket.get_width_m();
     double tile_height = curr_bucket.get_height_m();
     // cout << "tile width = " << tile_width << "  tile_height = "
@@ -209,29 +217,6 @@ void FGTileMgr::schedule_needed( double vis, const SGBucket& curr_bucket) {
     }
 }
 
-
-void FGTileMgr::initialize_queue()
-{
-    // First time through or we have teleported, initialize the
-    // system and load all relavant tiles
-
-    SG_LOG( SG_TERRAIN, SG_INFO, "Initialize_queue(): Updating Tile list for "
-            << current_bucket );
-    // cout << "tile cache size = " << tile_cache.get_size() << endl;
-
-    // wipe/initialize tile cache
-    // tile_cache.init();
-    previous_bucket.make_bad();
-
-    // build the local area list and schedule tiles for loading
-
-    // start with the center tile and work out in concentric
-    // "rings"
-
-    double visibility_meters = fgGetDouble("/environment/visibility-m");
-    schedule_needed(visibility_meters, current_bucket);
-}
-
 osg::Node*
 FGTileMgr::loadTileModel(const string& modelPath, bool cacheModel)
 {
@@ -322,16 +307,17 @@ void FGTileMgr::update_queues()
 // given the current lon/lat (in degrees), fill in the array of local
 // chunks.  If the chunk isn't already in the cache, then read it from
 // disk.
-int FGTileMgr::update( double visibility_meters )
-{
-    SGVec3d viewPos = globals->get_current_view()->get_view_pos();
-    return update(SGGeod::fromCart(viewPos), visibility_meters);
-}
-
-int FGTileMgr::update( const SGGeod& location, double visibility_meters)
+void FGTileMgr::update(double)
 {
     SG_LOG( SG_TERRAIN, SG_DEBUG, "FGTileMgr::update()" );
+    SGVec3d viewPos = globals->get_current_view()->get_view_pos();
+    prep_ssg_nodes();
+    double vis = _visibilityMeters->getDoubleValue();
+    schedule_tiles_at(SGGeod::fromCart(viewPos), vis);
+}
 
+int FGTileMgr::schedule_tiles_at(const SGGeod& location, double rangeM)
+{
     longitude = location.getLongitudeDeg();
     latitude = location.getLatitudeDeg();
 
@@ -351,16 +337,16 @@ int FGTileMgr::update( const SGGeod& location, double visibility_meters)
             // We've moved to a new bucket, we need to schedule any
             // needed tiles for loading.
             SG_LOG( SG_TERRAIN, SG_INFO, "FGTileMgr::update()" );
-            schedule_needed(visibility_meters, current_bucket);
+            schedule_needed(current_bucket, rangeM);
         }
     } else if ( state == Start || state == Inited ) {
         SG_LOG( SG_TERRAIN, SG_INFO, "State == Start || Inited" );
-//        initialize_queue();
+
         state = Running;
         if (current_bucket != previous_bucket
             && current_bucket.get_chunk_lon() != -1000) {
                SG_LOG( SG_TERRAIN, SG_INFO, "FGTileMgr::update()" );
-               schedule_needed(visibility_meters, current_bucket);
+               schedule_needed(current_bucket, rangeM);
         }
     }
 
@@ -372,11 +358,12 @@ int FGTileMgr::update( const SGGeod& location, double visibility_meters)
     return 1;
 }
 
-void FGTileMgr::prep_ssg_nodes(float vis) {
+void FGTileMgr::prep_ssg_nodes() {
 
     // traverse the potentially viewable tile list and update range
     // selector and transform
 
+    double vis = _visibilityMeters->getDoubleValue();
     TileEntry *e;
     tile_cache.reset_traversal();
 
diff --git a/src/Scenery/tilemgr.hxx b/src/Scenery/tilemgr.hxx
index 6b415e53b..13588342b 100644
--- a/src/Scenery/tilemgr.hxx
+++ b/src/Scenery/tilemgr.hxx
@@ -26,6 +26,7 @@
 
 #include <simgear/compiler.h>
 
+#include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/bucket/newbucket.hxx>
 #include <simgear/scene/tgdb/TileEntry.hxx>
 #include <simgear/scene/tgdb/TileCache.hxx>
@@ -37,7 +38,7 @@ namespace osg
 class Node;
 }
 
-class FGTileMgr : public simgear::ModelLoadHelper {
+class FGTileMgr : public SGSubsystem, public simgear::ModelLoadHelper {
 
 private:
 
@@ -49,15 +50,12 @@ private:
     };
 
     load_state state;
-
-    // initialize the cache
-    void initialize_queue();
-
+    
     // schedule a tile for loading
     void sched_tile( const SGBucket& b, const bool is_inner_ring );
 
     // schedule a needed buckets for loading
-    void schedule_needed(double visibility_meters, const SGBucket& curr_bucket);
+    void schedule_needed(const SGBucket& curr_bucket, double rangeM);
 
     SGBucket previous_bucket;
     SGBucket current_bucket;
@@ -77,29 +75,31 @@ private:
      */
     simgear::TileCache tile_cache;
 
+    // Update the various queues maintained by the tilemagr (private
+    // internal function, do not call directly.)
+    void update_queues();
+    
+    // Prepare the ssg nodes corresponding to each tile.  For each
+    // tile, set the ssg transform and update it's range selector
+    // based on current visibilty void prep_ssg_nodes( float
+    // visibility_meters );
+    void prep_ssg_nodes();
+    
+    SGPropertyNode* _visibilityMeters;
+    
 public:
     FGTileMgr();
 
     ~FGTileMgr();
 
     // Initialize the Tile Manager
-    int init();
+    virtual void init();
+    virtual void reinit();
 
-    // Update the various queues maintained by the tilemagr (private
-    // internal function, do not call directly.)
-    void update_queues();
+    virtual void update(double dt);
 
-    // given the current lon/lat (in degrees), fill in the array of
-    // local chunks.  If the chunk isn't already in the cache, then
-    // read it from disk.
-    int update( double visibility_meters );
-    int update( const SGGeod& location, double visibility_meters);
+    int schedule_tiles_at(const SGGeod& location, double rangeM);
 
-    // Prepare the ssg nodes corresponding to each tile.  For each
-    // tile, set the ssg transform and update it's range selector
-    // based on current visibilty void prep_ssg_nodes( float
-    // visibility_meters );
-    void prep_ssg_nodes(float visibility_meters );
 
     const SGBucket& get_current_bucket () const { return current_bucket; }
 

From e7b58d48e32e017a3d5ceddeb60ec04f6166d81f Mon Sep 17 00:00:00 2001
From: Thorsten Brehm <brehm@patagonia.southamerica>
Date: Sat, 2 Oct 2010 00:40:24 +0200
Subject: [PATCH 08/45] Fix wxradar to use path resolution make it work with
 the new "multiple aircraft dir" feature

---
 src/Instrumentation/wxradar.cxx | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/Instrumentation/wxradar.cxx b/src/Instrumentation/wxradar.cxx
index f32e12605..e8619dec6 100644
--- a/src/Instrumentation/wxradar.cxx
+++ b/src/Instrumentation/wxradar.cxx
@@ -122,10 +122,9 @@ wxRadarBg::init ()
         "Aircraft/Instruments/Textures/od_wxradar.rgb");
     _resultTexture = FGTextureManager::createTexture(_texture_path.c_str(), false);
 
-    SGPath tpath(globals->get_fg_root());
     string path = _Instrument->getStringValue("echo-texture-path",
         "Aircraft/Instruments/Textures/wxecho.rgb");
-    tpath.append(path);
+    SGPath tpath = globals->resolve_aircraft_path(path);
 
     // no mipmap or else alpha will mix with pixels on the border of shapes, ruining the effect
     _wxEcho = SGLoadTexture2D(tpath, false, false);

From dba471519f653b92cb10af871f0d215b0ada3042 Mon Sep 17 00:00:00 2001
From: Tim Moore <timoore33@gmail.com>
Date: Sat, 2 Oct 2010 23:03:27 +0200
Subject: [PATCH 09/45] Thorsten Brem's patches for bug 122

Fixes teleporting problems and disappearing tiles.
---
 src/Scenery/tilemgr.cxx | 32 ++++++++++++++++++++++----------
 src/Scenery/tilemgr.hxx |  2 +-
 2 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx
index 5abcf791d..6e9c43812 100644
--- a/src/Scenery/tilemgr.cxx
+++ b/src/Scenery/tilemgr.cxx
@@ -103,17 +103,19 @@ void FGTileMgr::reinit()
 }
 
 // schedule a tile for loading
-void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring ) {
+void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring, const bool is_cache_locked ) {
     // see if tile already exists in the cache
     TileEntry *t = tile_cache.get_tile( b );
     if (t) {
-      t->set_inner_ring( is_inner_ring );
+        t->set_timestamp(tile_cache.get_current_time());
+        t->set_inner_ring( is_inner_ring );
+        t->set_cache_lock( is_cache_locked );
       return;
     }
     
     // make space in the cache
     SceneryPager* pager = FGScenery::getPagerSingleton();
-    while ( (int)tile_cache.get_size() > tile_cache.get_max_cache_size() ) {
+    while ( (int)tile_cache.get_size() >= tile_cache.get_max_cache_size() ) {
         long index = tile_cache.get_oldest_tile();
         if ( index >= 0 ) {
             TileEntry *old = tile_cache.get_tile( index );
@@ -132,20 +134,21 @@ void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring ) {
 
     // create a new entry
     TileEntry *e = new TileEntry( b );
-
+    
     // insert the tile into the cache
     if ( tile_cache.insert_tile( e ) ) {
+        e->set_inner_ring( is_inner_ring );
+        e->set_cache_lock( is_cache_locked );
         // update_queues will generate load request
+        // Attach to scene graph
+        e->addToSceneGraph(globals->get_scenery()->get_terrain_branch());
     } else {
         // insert failed (cache full with no available entries to
         // delete.)  Try again later
         delete e;
     }
-    // Attach to scene graph
-    e->addToSceneGraph(globals->get_scenery()->get_terrain_branch());
 }
 
-
 // schedule a needed buckets for loading
 void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) {
     
@@ -188,11 +191,20 @@ void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) {
     // location.
     tile_cache.clear_inner_ring_flags();
 
+    // clear the cache lock flags which prevented tiles of the previous position to be dropped
+    // from the cache.
+    tile_cache.clear_cache_lock_flags();
+
+    // update timestamps, so all tiles scheduled now are *newer* than any tile previously loaded
+    osg::FrameStamp* framestamp
+            = globals->get_renderer()->getViewer()->getFrameStamp();
+    tile_cache.set_current_time(framestamp->getReferenceTime());
+
     SGBucket b;
 
     // schedule center tile first so it can be loaded first
     b = sgBucketOffset( longitude, latitude, 0, 0 );
-    sched_tile( b, true );
+    sched_tile( b, true, true );
 
     int x, y;
 
@@ -201,7 +213,7 @@ void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) {
         for ( y = -1; y <= 1; ++y ) {
             if ( x != 0 || y != 0 ) {
                 b = sgBucketOffset( longitude, latitude, x, y );
-                sched_tile( b, true );
+                sched_tile( b, true, true);
             }
         }
     }
@@ -211,7 +223,7 @@ void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) {
         for ( y = -yrange; y <= yrange; ++y ) {
             if ( x < -1 || x > 1 || y < -1 || y > 1 ) {
                 SGBucket b = sgBucketOffset( longitude, latitude, x, y );
-                sched_tile( b, false );
+                sched_tile( b, false, true);
             }
         }
     }
diff --git a/src/Scenery/tilemgr.hxx b/src/Scenery/tilemgr.hxx
index 13588342b..98dcc3d18 100644
--- a/src/Scenery/tilemgr.hxx
+++ b/src/Scenery/tilemgr.hxx
@@ -52,7 +52,7 @@ private:
     load_state state;
     
     // schedule a tile for loading
-    void sched_tile( const SGBucket& b, const bool is_inner_ring );
+    void sched_tile( const SGBucket& b, const bool is_inner_ring, const bool is_cache_locked );
 
     // schedule a needed buckets for loading
     void schedule_needed(const SGBucket& curr_bucket, double rangeM);

From 9ffaf11aa5e78ee5c6864fdaa0c3d0a5ea9097d1 Mon Sep 17 00:00:00 2001
From: Torsten Dreyer <Torsten@t3r.de>
Date: Tue, 5 Oct 2010 14:29:36 +0200
Subject: [PATCH 10/45] Autopilot: fix initialization of digital filters

---
 src/Autopilot/digitalfilter.cxx | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/Autopilot/digitalfilter.cxx b/src/Autopilot/digitalfilter.cxx
index 9edf53b82..bdd39397a 100644
--- a/src/Autopilot/digitalfilter.cxx
+++ b/src/Autopilot/digitalfilter.cxx
@@ -343,8 +343,10 @@ void DigitalFilter::update( bool firstTime, double dt)
 {
   if( _implementation == NULL ) return;
 
-  if( firstTime ) 
-    _implementation->initialize( get_output_value() );
+  if( firstTime ) {
+    SG_LOG(SG_AUTOPILOT,SG_DEBUG, "First time initialization of " << get_name() << " to " << _valueInput.get_value() );
+    _implementation->initialize( _valueInput.get_value() );
+  }
 
   double input = _valueInput.get_value() - _referenceInput.get_value();
   double output = _implementation->compute( dt, input );

From 9be636555cc4e82e0bd74a54e77b4adfb84f9d31 Mon Sep 17 00:00:00 2001
From: Thorsten Brehm <brehm@patagonia.southamerica>
Date: Tue, 5 Oct 2010 22:34:08 +0200
Subject: [PATCH 11/45] Fixed navradio when shutting down/restarting nav
 receiver. "nav-loc" and "has_gs" properties were not updated when nav
 receiver was rebooted.

Shutting down the nav receiver clears all nav outputs (including "nav-loc" and "has_gs").
=> When nav receiver is powered again, all outputs must be updated.
=> "nav-loc" and "has_gs" are only updated when active nav station changes.
=> old nav station must be cleared on shutdown to enforce update on nav reboot...
---
 src/Instrumentation/navradio.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/Instrumentation/navradio.cxx b/src/Instrumentation/navradio.cxx
index 0970cae5a..2aac4b26d 100644
--- a/src/Instrumentation/navradio.cxx
+++ b/src/Instrumentation/navradio.cxx
@@ -390,6 +390,7 @@ void FGNavRadio::clearOutputs()
   
   _dmeInRange = false;
   _operable = false;
+  _navaid = NULL;
 }
 
 void FGNavRadio::updateReceiver(double dt)

From a1137ed940710c6531fa12e5427fcaa6d1f3f0bd Mon Sep 17 00:00:00 2001
From: Thorsten Brehm <brehm@patagonia.southamerica>
Date: Tue, 5 Oct 2010 22:34:23 +0200
Subject: [PATCH 12/45] Another GPWS fix: terrain clearance filter must be
 reset on reset/reposition. Queue of recent altitude samples must be cleared
 on reset/reposition to avoid nuisance alerts...

---
 src/Instrumentation/mk_viii.cxx | 8 ++++++++
 src/Instrumentation/mk_viii.hxx | 3 ++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/Instrumentation/mk_viii.cxx b/src/Instrumentation/mk_viii.cxx
index 25e0f2491..d69cc96ad 100755
--- a/src/Instrumentation/mk_viii.cxx
+++ b/src/Instrumentation/mk_viii.cxx
@@ -362,6 +362,7 @@ MK_VIII::SystemHandler::update ()
       if (replay_state != last_replay_state)
 	{
 	  mk->alert_handler.reposition();
+	  mk->io_handler.reposition();
 
 	  last_replay_state = replay_state;
 	  state = STATE_REPOSITION;
@@ -1065,6 +1066,7 @@ MK_VIII::IOHandler::boot ()
   mk_doutput(glideslope_cancel) = power_saved.glideslope_cancel;
 
   altitude_samples.clear();
+  reset_terrain_clearance();
 }
 
 void
@@ -1364,6 +1366,12 @@ MK_VIII::IOHandler::reset_terrain_clearance ()
   update_terrain_clearance();
 }
 
+void
+MK_VIII::IOHandler::reposition ()
+{
+  reset_terrain_clearance();
+}
+
 void
 MK_VIII::IOHandler::handle_input_fault (bool test, FaultHandler::Fault fault)
 {
diff --git a/src/Instrumentation/mk_viii.hxx b/src/Instrumentation/mk_viii.hxx
index 594094cf8..517ee49f1 100755
--- a/src/Instrumentation/mk_viii.hxx
+++ b/src/Instrumentation/mk_viii.hxx
@@ -609,6 +609,7 @@ public:
     void update_egpws_alert_discrete_2 ();
     void update_egpwc_alert_discrete_3 ();
     void update_outputs ();
+    void reposition ();
 
     void update_lamps ();
     void set_lamp (Lamp lamp);
@@ -639,7 +640,7 @@ public:
 
     public:
       inline TerrainClearanceFilter ()
-	: value(0) {}
+	: value(0.0), last_update(-1.0) {}
 
       double update (double agl);
       void reset ();

From d39841d2dfdf82e1d590ab331888e3a392d199c6 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sat, 2 Oct 2010 16:09:02 +0100
Subject: [PATCH 13/45] Make FGAircraftModel behave like a standarrd subsystem.

---
 src/Main/fg_init.cxx | 16 ----------------
 src/Main/globals.cxx |  1 -
 src/Main/main.cxx    |  5 +----
 3 files changed, 1 insertion(+), 21 deletions(-)

diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index c62e96eaf..f1c542310 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -1262,14 +1262,6 @@ bool fgInitGeneral() {
     return true;
 }
 
-// Initialize view parameters
-void fgInitView() {
-  // force update of model so that viewer can get some data...
-  globals->get_aircraft_model()->update(0);
-  // run update for current view so that data is current...
-  globals->get_viewmgr()->update(0);
-}
-
 // This is the top level init routine which calls all the other
 // initialization routines.  If you are adding a subsystem to flight
 // gear, its initialization call should located in this routine.
@@ -1355,12 +1347,6 @@ bool fgInitSubsystems() {
 
     globals->add_subsystem( "xml-autopilot", FGXMLAutopilotGroup::createInstance(), SGSubsystemMgr::FDM );
     globals->add_subsystem( "route-manager", new FGRouteMgr );
-    
-    ////////////////////////////////////////////////////////////////////
-    // Initialize the view manager subsystem.
-    ////////////////////////////////////////////////////////////////////
-
-    fgInitView();
 
     ////////////////////////////////////////////////////////////////////
     // Initialize the Input-Output subsystem
@@ -1542,8 +1528,6 @@ void fgReInitSubsystems()
     // reload offsets from config defaults
     globals->get_viewmgr()->reinit();
 
-    fgInitView();
-
     globals->get_controls()->reset_all();
 
     globals->get_subsystem("time")->reinit();
diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx
index c52c5e182..93755ced7 100644
--- a/src/Main/globals.cxx
+++ b/src/Main/globals.cxx
@@ -189,7 +189,6 @@ FGGlobals::~FGGlobals()
     delete viewmgr;
 
 //     delete commands;
-    delete acmodel;
     delete model_mgr;
     delete channel_options_list;
     delete initial_waypoints;
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 294c39c92..1ed54dfe0 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -158,7 +158,6 @@ static void fgMainLoop( void ) {
 #endif  
     
     globals->get_subsystem_mgr()->update(sim_dt);
-    globals->get_aircraft_model()->update(sim_dt);
 
     // run Nasal's settimer() loops right before the view manager
     globals->get_event_mgr()->update(sim_dt);
@@ -404,9 +403,7 @@ static void fgIdleFunction ( void ) {
         ////////////////////////////////////////////////////////////////////
         FGAircraftModel* acm = new FGAircraftModel;
         globals->set_aircraft_model(acm);
-        //globals->add_subsystem("aircraft-model", acm);
-        acm->init();
-        acm->bind();
+        globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY);
 
         ////////////////////////////////////////////////////////////////////
         // Initialize the view manager subsystem.

From 0c342308eb73079724befab0a9e93bcdf7b06244 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sat, 2 Oct 2010 23:40:38 +0100
Subject: [PATCH 14/45] Make MultiPlayer a well-behaved subsystem.

---
 src/Main/fg_init.cxx             | 15 ++++++++-------
 src/Main/fg_os_osgviewer.cxx     |  4 ++++
 src/Main/globals.cxx             | 16 ++++++----------
 src/Main/globals.hxx             | 11 -----------
 src/Main/main.cxx                |  5 -----
 src/MultiPlayer/multiplaymgr.cxx | 14 +++++++-------
 src/MultiPlayer/multiplaymgr.hxx | 17 +++++++----------
 src/Network/multiplay.cxx        |  4 ++--
 8 files changed, 34 insertions(+), 52 deletions(-)

diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index f1c542310..1ebff97b1 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -1397,6 +1397,14 @@ bool fgInitSubsystems() {
     ////////////////////////////////////////////////////////////////////
     globals->add_subsystem("atis", new FGAtisManager, SGSubsystemMgr::POST_FDM);
 #endif
+
+
+    ////////////////////////////////////////////////////////////////////
+    // Initialize multiplayer subsystem
+    ////////////////////////////////////////////////////////////////////
+
+    globals->add_subsystem("mp", new FGMultiplayMgr, SGSubsystemMgr::POST_FDM);
+
     ////////////////////////////////////////////////////////////////////
     // Initialise the AI Model Manager
     ////////////////////////////////////////////////////////////////////
@@ -1465,13 +1473,6 @@ bool fgInitSubsystems() {
     globals->get_subsystem_mgr()->bind();
     globals->get_subsystem_mgr()->init();
 
-    ////////////////////////////////////////////////////////////////////
-    // Initialize multiplayer subsystem
-    ////////////////////////////////////////////////////////////////////
-
-    globals->set_multiplayer_mgr(new FGMultiplayMgr);
-    globals->get_multiplayer_mgr()->init();
-
     ////////////////////////////////////////////////////////////////////////
     // Initialize the Nasal interpreter.
     // Do this last, so that the loaded scripts see initialized state
diff --git a/src/Main/fg_os_osgviewer.cxx b/src/Main/fg_os_osgviewer.cxx
index 26ecbd266..483a7f417 100644
--- a/src/Main/fg_os_osgviewer.cxx
+++ b/src/Main/fg_os_osgviewer.cxx
@@ -292,6 +292,10 @@ int fgOSMainLoop()
 
 int fgGetKeyModifiers()
 {
+    if (!globals->get_renderer()) { // happens during shutdown
+      return 0;
+    }
+    
     return globals->get_renderer()->getEventHandler()->getCurrentModifiers();
 }
 
diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx
index 93755ced7..a5eb32563 100644
--- a/src/Main/globals.cxx
+++ b/src/Main/globals.cxx
@@ -150,8 +150,8 @@ FGGlobals::FGGlobals() :
     tacanlist( NULL ),
     carrierlist( NULL ),
     channellist( NULL ),
-    airwaynet( NULL ),
-    multiplayer_mgr( NULL )
+    airwaynet( NULL )
+    
 {
   simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider());
 }
@@ -161,6 +161,8 @@ FGGlobals::FGGlobals() :
 FGGlobals::~FGGlobals() 
 {
     delete renderer;
+    renderer = NULL;
+    
 // The AIModels manager performs a number of actions upon
     // Shutdown that implicitly assume that other subsystems
     // are still operational (Due to the dynamic allocation and
@@ -168,16 +170,11 @@ FGGlobals::~FGGlobals()
     // shut down all subsystems, make sure we take down the 
     // AIModels system first.
     subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model");
-    // FGInput (FGInputEvent) and FGDialog calls get_subsystem() in their destructors, 
-    // which is not safe since some subsystem are already deleted but can be referred.
-    // So these subsystems must be deleted prior to deleting subsystem_mgr unless
-    // ~SGSubsystemGroup and SGSubsystemMgr::get_subsystem are changed not to refer to
-    // deleted subsystems.
-    subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("input");
-    subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("gui");
+
     subsystem_mgr->unbind();
     delete subsystem_mgr;
     delete event_mgr;
+    
     delete time_params;
     delete mag;
     delete matlib;
@@ -203,7 +200,6 @@ FGGlobals::~FGGlobals()
     delete carrierlist;
     delete channellist;
     delete airwaynet;
-    delete multiplayer_mgr;
 
     soundmgr->unbind();
     delete soundmgr;
diff --git a/src/Main/globals.hxx b/src/Main/globals.hxx
index fccee8c51..20f1a6de4 100644
--- a/src/Main/globals.hxx
+++ b/src/Main/globals.hxx
@@ -66,7 +66,6 @@ class FGLight;
 class FGModelMgr;
 class FGRouteMgr;
 class FGScenery;
-class FGMultiplayMgr;
 class FGPanel;
 class FGTileMgr;
 class FGViewMgr;
@@ -175,9 +174,6 @@ private:
     FGTACANList *channellist;
     FGAirwayNetwork *airwaynet;
 
-    //Mulitplayer managers
-    FGMultiplayMgr *multiplayer_mgr;
-
     /// roots of Aircraft trees
     string_list fg_aircraft_dirs;
 public:
@@ -289,13 +285,6 @@ public:
       model_mgr = mgr;
     }
 
-    inline FGMultiplayMgr *get_multiplayer_mgr () { return multiplayer_mgr; }
-
-    inline void set_multiplayer_mgr (FGMultiplayMgr * mgr)
-    {
-      multiplayer_mgr = mgr;
-    }
-
     inline string_list *get_channel_options_list () {
 	return channel_options_list;
     }
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 1ed54dfe0..4e15fea75 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -146,11 +146,6 @@ static void fgMainLoop( void ) {
                                 altitude->getDoubleValue() * SG_FEET_TO_METER,
                                 globals->get_time_params()->getJD() );
 
-
-    // Update any multiplayer's network queues, the AIMultiplayer
-    // implementation is an AI model and depends on that
-    globals->get_multiplayer_mgr()->Update();
-
 #if ENABLE_ATCDCL  
     // Run ATC subsystem
     if (fgGetBool("/sim/atc/enabled"))
diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx
index 7574332b2..6ac9aada5 100644
--- a/src/MultiPlayer/multiplaymgr.cxx
+++ b/src/MultiPlayer/multiplaymgr.cxx
@@ -366,7 +366,7 @@ FGMultiplayMgr::~FGMultiplayMgr()
 //  Initialise object
 //
 //////////////////////////////////////////////////////////////////////
-bool
+void
 FGMultiplayMgr::init (void) 
 {
   //////////////////////////////////////////////////
@@ -374,7 +374,7 @@ FGMultiplayMgr::init (void)
   //////////////////////////////////////////////////
   if (mInitialised) {
     SG_LOG(SG_NETWORK, SG_WARN, "FGMultiplayMgr::init - already initialised");
-    return false;
+    return;
   }
   //////////////////////////////////////////////////
   //  Set members from property values
@@ -400,7 +400,7 @@ FGMultiplayMgr::init (void)
   if (rxPort <= 0) {
     SG_LOG(SG_NETWORK, SG_DEBUG,
       "FGMultiplayMgr - No receiver port, Multiplayermode disabled");
-    return (false);
+    return;
   }
   if (mCallsign.empty())
     mCallsign = "JohnDoe"; // FIXME: use getpwuid
@@ -415,17 +415,17 @@ FGMultiplayMgr::init (void)
   if (!mSocket->open(false)) {
     SG_LOG( SG_NETWORK, SG_DEBUG,
             "FGMultiplayMgr::init - Failed to create data socket" );
-    return false;
+    return;
   }
   mSocket->setBlocking(false);
   if (mSocket->bind(rxAddress.c_str(), rxPort) != 0) {
     perror("bind");
     SG_LOG( SG_NETWORK, SG_DEBUG,
             "FGMultiplayMgr::Open - Failed to bind receive socket" );
-    return false;
+    return;
   }
+  
   mInitialised = true;
-  return true;
 } // FGMultiplayMgr::init()
 //////////////////////////////////////////////////////////////////////
 
@@ -710,7 +710,7 @@ FGMultiplayMgr::SendTextMessage(const string &MsgText)
 //  
 //////////////////////////////////////////////////////////////////////
 void
-FGMultiplayMgr::Update(void) 
+FGMultiplayMgr::update(double) 
 {
   if (!mInitialised)
     return;
diff --git a/src/MultiPlayer/multiplaymgr.hxx b/src/MultiPlayer/multiplaymgr.hxx
index eb5fc1edf..b2417f8dd 100644
--- a/src/MultiPlayer/multiplaymgr.hxx
+++ b/src/MultiPlayer/multiplaymgr.hxx
@@ -33,25 +33,20 @@
 
 #include "mpmessages.hxx"
 
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
 #include <string>
-using std::string;
 #include <vector>
-using std::vector;
 
 #include <simgear/compiler.h>
 #include <simgear/props/props.hxx>
 #include <plib/netSocket.h>
 #include <Main/globals.hxx>
+#include <simgear/structure/subsystem_mgr.hxx>
 
 #include <AIModel/AIMultiplayer.hxx>
 
 struct FGExternalMotionInfo;
 
-class FGMultiplayMgr 
+class FGMultiplayMgr : public SGSubsystem
 {
 public:
 
@@ -67,13 +62,15 @@ public:
   
   FGMultiplayMgr();
   ~FGMultiplayMgr();
-  bool init(void);
+  
+  virtual void init(void);
+  virtual void update(double dt);
+  
   void Close(void);
   // transmitter
   void SendMyPosition(const FGExternalMotionData& motionInfo);
   void SendTextMessage(const string &sMsgText);
   // receiver
-  void Update(void);
   
 private:
   union MsgBuf;
@@ -93,7 +90,7 @@ private:
   netAddress mServer;
   bool mHaveServer;
   bool mInitialised;
-  string mCallsign;
+  std::string mCallsign;
 };
 
 #endif
diff --git a/src/Network/multiplay.cxx b/src/Network/multiplay.cxx
index d37c42fdf..eb8a52c08 100644
--- a/src/Network/multiplay.cxx
+++ b/src/Network/multiplay.cxx
@@ -243,7 +243,7 @@ bool FGMultiplay::process() {
       motionInfo.properties.push_back(pData);
     }
 
-    FGMultiplayMgr* mpmgr = globals->get_multiplayer_mgr();
+    FGMultiplayMgr* mpmgr = (FGMultiplayMgr*) globals->get_subsystem("mp");
     mpmgr->SendMyPosition(motionInfo);
     
     // Now remove the data
@@ -272,7 +272,7 @@ bool FGMultiplay::process() {
 ******************************************************************/
 bool FGMultiplay::close() {
 
-  FGMultiplayMgr *mgr = globals->get_multiplayer_mgr();
+  FGMultiplayMgr* mgr = (FGMultiplayMgr*) globals->get_subsystem("mp");
 
   if (mgr == 0) {
     return false;

From 9b2cea33e8bd9e2739f5ebb2ec6ff1668d7f7b9b Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Mon, 4 Oct 2010 09:13:26 +0100
Subject: [PATCH 15/45] Remove uneccessary explicit update of FGLight

---
 src/Main/globals.hxx | 1 -
 src/Main/main.cxx    | 5 -----
 2 files changed, 6 deletions(-)

diff --git a/src/Main/globals.hxx b/src/Main/globals.hxx
index 20f1a6de4..50bd24e67 100644
--- a/src/Main/globals.hxx
+++ b/src/Main/globals.hxx
@@ -62,7 +62,6 @@ class FGFlightPlanDispatcher;
 class FGNavList;
 class FGAirwayNetwork;
 class FGTACANList;
-class FGLight;
 class FGModelMgr;
 class FGRouteMgr;
 class FGScenery;
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 4e15fea75..1cfe91ba2 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -132,11 +132,6 @@ static void fgMainLoop( void ) {
     // compute simulated time (allowing for pause, warp, etc) and
     // real elapsed time
     timeMgr->computeTimeDeltas(sim_dt, real_dt);
-    
-    if (globals->get_warp_delta() != 0) {
-        FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
-        l->update( 0.5 );
-    }
 
     // update magvar model
     globals->get_mag()->update( longitude->getDoubleValue()

From a4f1139fcd8a130be87d7a9fee881b22d1acc8a9 Mon Sep 17 00:00:00 2001
From: Thorsten Brehm <brehm@patagonia.southamerica>
Date: Fri, 8 Oct 2010 21:41:09 +0200
Subject: [PATCH 16/45] Fixed autopilot/Predictor. Signature of
 Predictor::configure must match AnalogComponent::configure, otherwise the
 inherited method isn't overridden. => predictor couldn't be configured. =>
 speed predictor rules in "generic-autopilot-helper.xml" weren't working.

---
 src/Autopilot/predictor.cxx | 11 ++++++++++-
 src/Autopilot/predictor.hxx |  2 +-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/Autopilot/predictor.cxx b/src/Autopilot/predictor.cxx
index fe16d14db..eece5cf37 100644
--- a/src/Autopilot/predictor.cxx
+++ b/src/Autopilot/predictor.cxx
@@ -40,9 +40,18 @@ Predictor::Predictor () :
 {
 }
 
-bool Predictor::configure(const string& nodeName, SGPropertyNode* configNode)
+bool Predictor::configure(const string& nodeName, SGPropertyNode_ptr configNode)
 {
   SG_LOG( SG_AUTOPILOT, SG_BULK, "Predictor::configure(" << nodeName << ")" << endl );
+
+  if( AnalogComponent::configure( nodeName, configNode ) )
+    return true;
+
+  if( nodeName == "config" ) {
+    Component::configure( configNode );
+    return true;
+  }
+  
   if (nodeName == "seconds") {
     _seconds.push_back( new InputValue( configNode, 0 ) );
     return true;
diff --git a/src/Autopilot/predictor.hxx b/src/Autopilot/predictor.hxx
index 5418b337f..e4c21b514 100644
--- a/src/Autopilot/predictor.hxx
+++ b/src/Autopilot/predictor.hxx
@@ -53,7 +53,7 @@ private:
     InputValueList _filter_gain;
 
 protected:
-  bool configure(const std::string& nodeName, SGPropertyNode* configNode );
+  bool configure(const std::string& nodeName, SGPropertyNode_ptr configNode );
 
 public:
     Predictor();

From f901dac2ac598e68e55e0a53de419f173c19bfc6 Mon Sep 17 00:00:00 2001
From: Tim Moore <timoore33@gmail.com>
Date: Fri, 8 Oct 2010 23:46:38 +0200
Subject: [PATCH 17/45] replace GLU functions with OSG functionality

---
 src/Cockpit/hud.cxx                    | 21 +++++++++++++--------
 src/Cockpit/hud_rwy.cxx                | 14 ++++++++------
 src/Cockpit/panel.cxx                  |  9 ++++++---
 src/Instrumentation/HUD/HUD.cxx        | 19 ++++++++++++-------
 src/Instrumentation/HUD/HUD_runway.cxx | 13 ++++++++-----
 utils/Modeller/texture.cxx             |  7 ++++---
 6 files changed, 51 insertions(+), 32 deletions(-)

diff --git a/src/Cockpit/hud.cxx b/src/Cockpit/hud.cxx
index 57c2264e8..c08e67d0e 100644
--- a/src/Cockpit/hud.cxx
+++ b/src/Cockpit/hud.cxx
@@ -40,7 +40,7 @@
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/props/props_io.hxx>
 
-#include <osg/GLU>
+#include <osg/Matrixf>
 
 #include <GUI/new_gui.hxx>           // FGFontCache
 #include <Main/globals.hxx>
@@ -338,27 +338,31 @@ void fgUpdateHUD( osg::State* state ) {
 
 void fgUpdateHUDVirtual(osg::State* state)
 {
+    using namespace osg;
     FGViewer* view = globals->get_current_view();
 
     // Standard fgfs projection, with essentially meaningless clip
     // planes (we'll map the whole HUD plane to z=-1)
     glMatrixMode(GL_PROJECTION);
     glPushMatrix();
-    glLoadIdentity();
-    gluPerspective(view->get_v_fov(), 1/view->get_aspect_ratio(), 0.1, 10);
+    Matrixf proj
+        = Matrixf::perspective(view->get_v_fov(), 1/view->get_aspect_ratio(),
+                               0.1, 10);
+    glLoadMatrix(proj.ptr());
 
     glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
-    glLoadIdentity();
 
     // Standard fgfs view direction computation
-    float lookat[3];
+    Vec3f lookat;
     lookat[0] = -sin(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg());
     lookat[1] = tan(SG_DEGREES_TO_RADIANS * view->getPitchOffset_deg());
     lookat[2] = -cos(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg());
     if (fabs(lookat[1]) > 9999)
         lookat[1] = 9999; // FPU sanity
-    gluLookAt(0, 0, 0, lookat[0], lookat[1], lookat[2], 0, 1, 0);
+    Matrixf mv = Matrixf::lookAt(Vec3f(0.0, 0.0, 0.0), lookat,
+                                 Vec3f(0.0, 1.0, 0.0));
+    glLoadMatrix(mv.ptr());
 
     // Map the -1:1 square to a 55.0x41.25 degree wide patch at z=1.
     // This is the default fgfs field of view, which the HUD files are
@@ -391,10 +395,11 @@ void fgUpdateHUDVirtual(osg::State* state)
 void fgUpdateHUD( osg::State* state, GLfloat x_start, GLfloat y_start,
                   GLfloat x_end, GLfloat y_end )
 {
+    using namespace osg;
     glMatrixMode(GL_PROJECTION);
     glPushMatrix();
-    glLoadIdentity();
-    gluOrtho2D(x_start, x_end, y_start, y_end);
+    Matrixf proj = Matrixf::ortho2D(x_start, x_end, y_start, y_end);
+    glLoadMatrix(proj.ptr());
 
     glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
diff --git a/src/Cockpit/hud_rwy.cxx b/src/Cockpit/hud_rwy.cxx
index 2be152523..e884c7cfb 100644
--- a/src/Cockpit/hud_rwy.cxx
+++ b/src/Cockpit/hud_rwy.cxx
@@ -32,8 +32,7 @@
 #include <ATCDCL/ATCutils.hxx>
 #include <Main/viewer.hxx>
 
-#include <osg/GLU>
-
+#include <simgear/math/project.hxx>
 
 // int x, int y, int width, int height, float scale_data, bool working)
 
@@ -134,8 +133,9 @@ void runway_instr::draw()
         //Calculate the 2D points via gluProject
         int result = GL_TRUE;
         for (int i = 0; i < 6; i++) {
-            result = gluProject(points3d[i][0], points3d[i][1], points3d[i][2], mm,
-                    pm, view, &points2d[i][0], &points2d[i][1], &points2d[i][2]);
+            result = simgear::project(points3d[i][0], points3d[i][1], points3d[i][2],
+                                      mm, pm, view,
+                                      &points2d[i][0], &points2d[i][1], &points2d[i][2]);
         }
         //set the line width based on our distance from the runway
         setLineWidth();
@@ -239,7 +239,8 @@ bool runway_instr::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3&
         sgdVec3 newPt;
         sgdCopyVec3(newPt, a1);
         sgdAddVec3(newPt, vec);
-        if (gluProject(newPt[0], newPt[1], newPt[2], mm, pm, view, &p2[0], &p2[1], &p2[2])
+        if (simgear::project(newPt[0], newPt[1], newPt[2], mm, pm, view,
+                             &p2[0], &p2[1], &p2[2])
                 && (p2[2] > 0 && p2[2] < 1.0)) {
             boundPoint(p1, p2);
             glBegin(GL_LINES);
@@ -255,7 +256,8 @@ bool runway_instr::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3&
         sgdVec3 newPt;
         sgdCopyVec3(newPt, a2);
         sgdAddVec3(newPt, vec);
-        if (gluProject(newPt[0], newPt[1], newPt[2], mm, pm, view, &p1[0], &p1[1], &p1[2])
+        if (simgear::project(newPt[0], newPt[1], newPt[2], mm, pm, view,
+                             &p1[0], &p1[1], &p1[2])
                 && (p1[2] > 0 && p1[2] < 1.0)) {
             boundPoint(p2, p1);
             glBegin(GL_LINES);
diff --git a/src/Cockpit/panel.cxx b/src/Cockpit/panel.cxx
index 9c39626ee..8cc268788 100644
--- a/src/Cockpit/panel.cxx
+++ b/src/Cockpit/panel.cxx
@@ -40,6 +40,7 @@
 #include <osg/CullFace>
 #include <osg/Depth>
 #include <osg/Material>
+#include <osg/Matrixf>
 #include <osg/TexEnv>
 #include <osg/PolygonOffset>
 
@@ -273,6 +274,7 @@ FGPanel::update (double dt)
 void
 FGPanel::update (osg::State& state, GLfloat winx, GLfloat winw, GLfloat winy, GLfloat winh)
 {
+  using namespace osg;
                                // Calculate accelerations
                                // and jiggle the panel accordingly
                                // The factors and bounds are just
@@ -284,12 +286,13 @@ FGPanel::update (osg::State& state, GLfloat winx, GLfloat winw, GLfloat winy, GL
 
   glMatrixMode(GL_PROJECTION);
   glPushMatrix();
-  glLoadIdentity();
+  Matrixf proj;
   if ( _flipx->getBoolValue() ) {
-    gluOrtho2D(winx + winw, winx, winy + winh, winy); /* up side down */
+      proj = Matrixf::ortho2D(winx + winw, winx, winy + winh, winy); /* up side down */
   } else {
-    gluOrtho2D(winx, winx + winw, winy, winy + winh); /* right side up */
+      proj = Matrixf::ortho2D(winx, winx + winw, winy, winy + winh); /* right side up */
   }
+  glLoadMatrix(proj.ptr());
   
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
diff --git a/src/Instrumentation/HUD/HUD.cxx b/src/Instrumentation/HUD/HUD.cxx
index d37f28a3d..4ea539db3 100644
--- a/src/Instrumentation/HUD/HUD.cxx
+++ b/src/Instrumentation/HUD/HUD.cxx
@@ -186,27 +186,31 @@ void HUD::draw(osg::State&)
 
 void HUD::draw3D()
 {
+    using namespace osg;
     FGViewer* view = globals->get_current_view();
 
     // Standard fgfs projection, with essentially meaningless clip
     // planes (we'll map the whole HUD plane to z=-1)
     glMatrixMode(GL_PROJECTION);
     glPushMatrix();
-    glLoadIdentity();
-    gluPerspective(view->get_v_fov(), 1.0 / view->get_aspect_ratio(), 0.1, 10);
+    Matrixf proj
+        = Matrixf::perspective(view->get_v_fov(), 1/view->get_aspect_ratio(),
+                               0.1, 10);
+    glLoadMatrix(proj.ptr());
 
     glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
-    glLoadIdentity();
 
     // Standard fgfs view direction computation
-    float lookat[3];
+    Vec3f lookat;
     lookat[0] = -sin(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg());
     lookat[1] = tan(SG_DEGREES_TO_RADIANS * view->getPitchOffset_deg());
     lookat[2] = -cos(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg());
     if (fabs(lookat[1]) > 9999)
         lookat[1] = 9999; // FPU sanity
-    gluLookAt(0, 0, 0, lookat[0], lookat[1], lookat[2], 0, 1, 0);
+    Matrixf mv = Matrixf::lookAt(Vec3f(0.0, 0.0, 0.0), lookat,
+                                 Vec3f(0.0, 1.0, 0.0));
+    glLoadMatrix(mv.ptr());
 
     // Map the -1:1 square to a 55.0x41.25 degree wide patch at z=1.
     // This is the default fgfs field of view, which the HUD files are
@@ -236,10 +240,11 @@ void HUD::draw3D()
 
 void HUD::draw2D(GLfloat x_start, GLfloat y_start, GLfloat x_end, GLfloat y_end)
 {
+    using namespace osg;
     glMatrixMode(GL_PROJECTION);
     glPushMatrix();
-    glLoadIdentity();
-    gluOrtho2D(x_start, x_end, y_start, y_end);
+    Matrixf proj = Matrixf::ortho2D(x_start, x_end, y_start, y_end);
+    glLoadMatrix(proj.ptr());
 
     glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
diff --git a/src/Instrumentation/HUD/HUD_runway.cxx b/src/Instrumentation/HUD/HUD_runway.cxx
index 450f118a3..a31d0ff60 100644
--- a/src/Instrumentation/HUD/HUD_runway.cxx
+++ b/src/Instrumentation/HUD/HUD_runway.cxx
@@ -25,7 +25,7 @@
 
 #include <simgear/compiler.h>
 #include <simgear/math/sg_geodesy.hxx>
-#include <osg/GLU>
+#include <simgear/math/project.hxx>
 
 #include <Main/globals.hxx>
 #include <Scenery/scenery.hxx>
@@ -129,8 +129,9 @@ void HUD::Runway::draw()
     //Calculate the 2D points via gluProject
     int result = GL_TRUE;
     for (int i = 0; i < 6; i++) {
-        result = gluProject(_points3d[i][0], _points3d[i][1], _points3d[i][2], _mm,
-                _pm, _view, &_points2d[i][0], &_points2d[i][1], &_points2d[i][2]);
+        result = simgear::project(_points3d[i][0], _points3d[i][1], _points3d[i][2],
+                                  _mm, _pm, _view,
+                                  &_points2d[i][0], &_points2d[i][1], &_points2d[i][2]);
     }
     //set the line width based on our distance from the runway
     setLineWidth();
@@ -229,7 +230,8 @@ bool HUD::Runway::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3&
         sgdVec3 newPt;
         sgdCopyVec3(newPt, a1);
         sgdAddVec3(newPt, vec);
-        if (gluProject(newPt[0], newPt[1], newPt[2], _mm, _pm, _view, &p2[0], &p2[1], &p2[2])
+        if (simgear::project(newPt[0], newPt[1], newPt[2], _mm, _pm, _view,
+                             &p2[0], &p2[1], &p2[2])
                 && (p2[2] > 0 && p2[2] < 1.0)) {
             boundPoint(p1, p2);
             glBegin(GL_LINES);
@@ -245,7 +247,8 @@ bool HUD::Runway::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3&
         sgdVec3 newPt;
         sgdCopyVec3(newPt, a2);
         sgdAddVec3(newPt, vec);
-        if (gluProject(newPt[0], newPt[1], newPt[2], _mm, _pm, _view, &p1[0], &p1[1], &p1[2])
+        if (simgear::project(newPt[0], newPt[1], newPt[2], _mm, _pm, _view,
+                             &p1[0], &p1[1], &p1[2])
                 && (p1[2] > 0 && p1[2] < 1.0)) {
             boundPoint(p2, p1);
             glBegin(GL_LINES);
diff --git a/utils/Modeller/texture.cxx b/utils/Modeller/texture.cxx
index 3c747e60c..75c720a25 100644
--- a/utils/Modeller/texture.cxx
+++ b/utils/Modeller/texture.cxx
@@ -17,7 +17,7 @@
 # include <windows.h>
 #endif
 
-#include <osg/GLU>
+#include <osg/Matrixf>
 
 #include <math.h>
 #include <zlib.h>
@@ -95,6 +95,7 @@ SGTexture::bind()
 void
 SGTexture::resize(unsigned int width, unsigned int height)
 {
+    using namespace osg;
     GLfloat aspect;
 
     // Make sure that we don't get a divide by zero exception
@@ -110,10 +111,10 @@ SGTexture::resize(unsigned int width, unsigned int height)
     // Go to the projection matrix, this gets modified by the perspective
     // calulations
     glMatrixMode(GL_PROJECTION);
-    glLoadIdentity();
 
     // Do the perspective calculations
-    gluPerspective(45.0, aspect, 1.0, 400.0);
+    Matrixf proj = Matrixf::perspective(45.0, aspect, 1.0, 400.0);
+    glLoadMatrix(proj.ptr());
 
     // Return to the modelview matrix
     glMatrixMode(GL_MODELVIEW);

From 06fb956f2c506f4468860e8eca9eccd09127961a Mon Sep 17 00:00:00 2001
From: Torsten Dreyer <Torsten@t3r.de>
Date: Mon, 11 Oct 2010 21:21:53 +0200
Subject: [PATCH 18/45] Fix timing issue on startup for auto runway selection

The automatic runway selection code in startup.nas depends
on a valid metar before /sim/signals/nasal-dir-initialized
is fired. If the METAR arrives after that signal, no automatic
runway selection is performed. This patch waits for a METAR
on the first update() loop of the subsystem.
---
 src/Environment/realwx_ctrl.cxx | 131 +++++++++++++++++++-------------
 1 file changed, 80 insertions(+), 51 deletions(-)

diff --git a/src/Environment/realwx_ctrl.cxx b/src/Environment/realwx_ctrl.cxx
index 4b379a657..4631b0c52 100644
--- a/src/Environment/realwx_ctrl.cxx
+++ b/src/Environment/realwx_ctrl.cxx
@@ -55,6 +55,9 @@ public:
 protected:
     void bind();
     void unbind();
+    void update( double dt );
+
+    virtual void update( bool first, double dt ) = 0;
 
     long getMetarMaxAgeMin() const { return _max_age_n == NULL ? 0 : _max_age_n->getLongValue(); }
 
@@ -65,6 +68,7 @@ protected:
     SGPropertyNode_ptr _max_age_n;
 
     bool _enabled;
+    bool __enabled;
     TiedPropertyList _tiedProperties;
     MetarProperties  _metarProperties;
 };
@@ -83,6 +87,7 @@ BasicRealWxController::BasicRealWxController( SGPropertyNode_ptr rootNode ) :
   _ground_elevation_n( fgGetNode( "/position/ground-elev-m", true )),
   _max_age_n( fgGetNode( "/environment/params/metar-max-age-min", false ) ),
   _enabled(true),
+  __enabled(false),
   _metarProperties( fgGetNode( rootNode->getStringValue("metar", "/environment/metar"), true ) )
 {
 }
@@ -93,11 +98,13 @@ BasicRealWxController::~BasicRealWxController()
 
 void BasicRealWxController::init()
 {
+    __enabled = false;
     update(0); // fetch data ASAP
 }
 
 void BasicRealWxController::reinit()
 {
+    __enabled = false;
 }
 
 void BasicRealWxController::bind()
@@ -111,13 +118,23 @@ void BasicRealWxController::unbind()
     _tiedProperties.Untie();
 }
 
+void BasicRealWxController::update( double dt )
+{
+  if( _enabled ) {
+    update( !__enabled, dt );
+    __enabled = true;
+  } else {
+    __enabled = false;
+  }
+}
+
 /* -------------------------------------------------------------------------------- */
 
 class NoaaMetarRealWxController : public BasicRealWxController {
 public:
     NoaaMetarRealWxController( SGPropertyNode_ptr rootNode );
     virtual ~NoaaMetarRealWxController();
-    virtual void update (double delta_time_sec);
+    virtual void update (bool first, double delta_time_sec);
 
     class MetarLoadRequest {
     public:
@@ -146,12 +163,13 @@ private:
 #if defined(ENABLE_THREADS)
      class MetarLoadThread : public OpenThreads::Thread {
      public:
-         MetarLoadThread( long maxAge );
-         void requestMetar( const MetarLoadRequest & metarRequest );
-         bool hasMetar() { return _responseQueue.size() > 0; }
-         string getMetar() { return _responseQueue.pop(); }
-         virtual void run();
+        MetarLoadThread( long maxAge );
+        void requestMetar( const MetarLoadRequest & metarRequest, bool background = true );
+        bool hasMetar() { return _responseQueue.size() > 0; }
+        string getMetar() { return _responseQueue.pop(); }
+        virtual void run();
      private:
+        void fetch( const MetarLoadRequest & );
         long _maxAge;
         SGBlockingQueue <MetarLoadRequest> _requestQueue;
         SGBlockingQueue <string> _responseQueue;
@@ -188,17 +206,8 @@ NoaaMetarRealWxController::~NoaaMetarRealWxController()
 #endif // ENABLE_THREADS
 }
 
-void NoaaMetarRealWxController::update( double dt )
+void NoaaMetarRealWxController::update( bool first, double dt )
 {
-    if( !_enabled )
-        return;
-
-    if( _metarLoadThread->hasMetar() ) {
-        string metar = _metarLoadThread->getMetar();
-        SG_LOG( SG_ALL, SG_ALERT, "NoaaMetarRwalWxController::update() received METAR " << metar );
-        _metarDataNode->setStringValue( metar );
-    }
-
     _metarTimeToLive -= dt;
     _positionTimeToLive -= dt;
     _minimumRequestInterval -= dt;
@@ -234,11 +243,21 @@ void NoaaMetarRealWxController::update( double dt )
     if( !valid ) {
         if( _minimumRequestInterval <= 0 && stationId.length() > 0 ) {
             MetarLoadRequest request( stationId );
-            _metarLoadThread->requestMetar( request );
+            // load the first metar in the foreground to make sure a metar is received
+            // before the automatic runway selection code runs. All subsequent calls
+            // run in the background
+            _metarLoadThread->requestMetar( request, !first );
             _minimumRequestInterval = 10;
         }
     }
 
+    if( _metarLoadThread->hasMetar() ) {
+        string metar = _metarLoadThread->getMetar();
+        SG_LOG( SG_ALL, SG_ALERT, "NoaaMetarRwalWxController::update() received METAR " << metar );
+        _metarDataNode->setStringValue( metar );
+    }
+
+
 }
 
 /* -------------------------------------------------------------------------------- */
@@ -249,16 +268,20 @@ NoaaMetarRealWxController::MetarLoadThread::MetarLoadThread( long maxAge ) :
 {
 }
 
-void NoaaMetarRealWxController::MetarLoadThread::requestMetar( const MetarLoadRequest & metarRequest )
+void NoaaMetarRealWxController::MetarLoadThread::requestMetar( const MetarLoadRequest & metarRequest, bool background )
 {
-    if( _requestQueue.size() > 10 ) {
-        SG_LOG(SG_ALL,SG_ALERT,
-            "NoaaMetarRealWxController::MetarLoadThread::requestMetar() more than 10 outstanding METAR requests, dropping " 
-            << metarRequest._stationId );
-        return;
-    }
+    if( background ) {
+        if( _requestQueue.size() > 10 ) {
+            SG_LOG(SG_ALL,SG_ALERT,
+                "NoaaMetarRealWxController::MetarLoadThread::requestMetar() more than 10 outstanding METAR requests, dropping " 
+                << metarRequest._stationId );
+            return;
+        }
 
-    _requestQueue.push( metarRequest );
+        _requestQueue.push( metarRequest );
+    } else {
+        fetch( metarRequest );
+    }
 }
 
 void NoaaMetarRealWxController::MetarLoadThread::run()
@@ -269,34 +292,40 @@ void NoaaMetarRealWxController::MetarLoadThread::run()
         if( request._stationId.size() == 0 )
             break;
 
-       SGSharedPtr<FGMetar> result = NULL;
-
-        try {
-            result = new FGMetar( request._stationId, request._proxyHost, request._proxyPort, request._proxyAuth );
-        } catch (const sg_io_exception& e) {
-            SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): can't get METAR for " 
-                                        << request._stationId << ":" << e.getFormattedMessage().c_str() );
-            continue;
-        }
-
-        string reply = result->getData();
-        std::replace(reply.begin(), reply.end(), '\n', ' ');
-        string metar = simgear::strutils::strip( reply );
-
-        if( metar.empty() ) {
-            SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): dropping empty METAR for " 
-                                        << request._stationId );
-        }
-
-        if( _maxAge && result->getAge_min() > _maxAge ) {
-            SG_LOG( SG_GENERAL, SG_ALERT, "NoaaMetarRealWxController::fetchMetar(): dropping outdated METAR " 
-                                         << metar );
-            return;
-        }
-
-        _responseQueue.push( metar );
+        fetch( request );
     }
 }
+
+void NoaaMetarRealWxController::MetarLoadThread::fetch( const MetarLoadRequest & request )
+{
+   SGSharedPtr<FGMetar> result = NULL;
+
+    try {
+        result = new FGMetar( request._stationId, request._proxyHost, request._proxyPort, request._proxyAuth );
+    } catch (const sg_io_exception& e) {
+        SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): can't get METAR for " 
+                                    << request._stationId << ":" << e.getFormattedMessage().c_str() );
+        return;
+    }
+
+    string reply = result->getData();
+    std::replace(reply.begin(), reply.end(), '\n', ' ');
+    string metar = simgear::strutils::strip( reply );
+
+    if( metar.empty() ) {
+        SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): dropping empty METAR for " 
+                                    << request._stationId );
+        return;
+    }
+
+    if( _maxAge && result->getAge_min() > _maxAge ) {
+        SG_LOG( SG_GENERAL, SG_ALERT, "NoaaMetarRealWxController::fetchMetar(): dropping outdated METAR " 
+                                     << metar );
+        return;
+    }
+
+    _responseQueue.push( metar );
+}
 #endif
 
 /* -------------------------------------------------------------------------------- */

From 9f9e86a61e1313963c9b961ed390cee3e967c659 Mon Sep 17 00:00:00 2001
From: Torsten Dreyer <Torsten@t3r.de>
Date: Tue, 12 Oct 2010 15:26:00 +0200
Subject: [PATCH 19/45] remove leftover debugging stuff

---
 src/Autopilot/predictor.cxx | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/src/Autopilot/predictor.cxx b/src/Autopilot/predictor.cxx
index eece5cf37..e1a9f6dc8 100644
--- a/src/Autopilot/predictor.cxx
+++ b/src/Autopilot/predictor.cxx
@@ -23,15 +23,6 @@
 
 #include "predictor.hxx"
 
-#ifdef SG_BULK
-#undef SG_BULK
-#endif
-#define SG_BULK SG_ALERT
-#ifdef SG_INFO
-#undef SG_INFO
-#endif
-#define SG_INFO SG_ALERT
-
 using namespace FGXMLAutopilot;
 
 Predictor::Predictor () :

From 6251814604a2395d66dc28fbe0cde8ce99e7be2c Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Mon, 18 Oct 2010 00:58:35 +0100
Subject: [PATCH 20/45] Use a property listener on the root, to observe
 property creation, and thus lazily update the MP property map. Fixes bug 164,
 and probably many latent MP missing-property issues.

---
 src/Network/multiplay.cxx | 65 +++++++++++++++++++++++++++++++--------
 src/Network/multiplay.hxx |  8 +++++
 2 files changed, 61 insertions(+), 12 deletions(-)

diff --git a/src/Network/multiplay.cxx b/src/Network/multiplay.cxx
index eb8a52c08..e7991e6b8 100644
--- a/src/Network/multiplay.cxx
+++ b/src/Network/multiplay.cxx
@@ -49,6 +49,24 @@ using std::string;
 const char sFG_MULTIPLAY_BID[] = "$Id$";
 const char sFG_MULTIPLAY_HID[] = FG_MULTIPLAY_HID;
 
+typedef std::set<std::string> string_set;
+
+class MPPropertyListener : public SGPropertyChangeListener
+{
+public:
+  MPPropertyListener(FGMultiplay* mp) :
+    _multiplay(mp)
+  {
+  }
+
+  virtual void childAdded(SGPropertyNode*, SGPropertyNode*)
+  {
+    _multiplay->setPropertiesChanged();
+  }
+
+private:
+  FGMultiplay* _multiplay;
+};
 
 /******************************************************************
 * Name: FGMultiplay
@@ -73,6 +91,7 @@ FGMultiplay::FGMultiplay (const string &dir, const int rate, const string &host,
 
   }
 
+  mPropertiesChanged = true;
 }
 
 
@@ -97,19 +116,38 @@ bool FGMultiplay::open() {
     }
 
     set_enabled(true);
-
-    SGPropertyNode* root = globals->get_props();
-
-    /// Build up the id to property map
     
-    for (unsigned i = 0; i < FGMultiplayMgr::numProperties; ++i) {
+    mPropertiesChanged = true;
+    
+    MPPropertyListener* pl = new MPPropertyListener(this);
+    globals->get_props()->addChangeListener(pl, false);
+    return is_enabled();
+}
+
+void FGMultiplay::findProperties()
+{
+  if (!mPropertiesChanged) {
+    return;
+  }
+  
+  mPropertiesChanged = false;
+  
+  for (unsigned i = 0; i < FGMultiplayMgr::numProperties; ++i) {
       const char* name = FGMultiplayMgr::sIdPropertyList[i].name;
-      SGPropertyNode* pNode = root->getNode(name);
-      if (pNode)
-        mPropertyMap[FGMultiplayMgr::sIdPropertyList[i].id] = pNode;
+      SGPropertyNode* pNode = globals->get_props()->getNode(name);
+      if (!pNode) {
+        continue;
+      }
+      
+      int id = FGMultiplayMgr::sIdPropertyList[i].id;
+      if (mPropertyMap.find(id) != mPropertyMap.end()) {
+        continue; // already activated
+      }
+      
+      mPropertyMap[id] = pNode;
+      SG_LOG(SG_NETWORK, SG_INFO, "activating MP property:" << pNode->getPath());
     }
 
-    return is_enabled();
 }
 
 
@@ -121,7 +159,8 @@ bool FGMultiplay::open() {
 bool FGMultiplay::process() {
   using namespace simgear;
   if (get_direction() == SG_IO_OUT) {
-
+    findProperties();
+    
     // check if we have left initialization phase. That will not provide
     // interresting data, also the freeze in simulation time hurts the
     // multiplayer clients
@@ -270,8 +309,10 @@ bool FGMultiplay::process() {
 * Description:  Closes the multiplayer mgrs to stop any further
 * network processing
 ******************************************************************/
-bool FGMultiplay::close() {
-
+bool FGMultiplay::close()
+{
+  mPropertyMap.clear();
+  
   FGMultiplayMgr* mgr = (FGMultiplayMgr*) globals->get_subsystem("mp");
 
   if (mgr == 0) {
diff --git a/src/Network/multiplay.hxx b/src/Network/multiplay.hxx
index 0d5563c0e..f596ea0eb 100644
--- a/src/Network/multiplay.hxx
+++ b/src/Network/multiplay.hxx
@@ -78,7 +78,15 @@ public:
     */
     bool close();
 
+    void setPropertiesChanged()
+    {
+      mPropertiesChanged = true;
+    }
 private:
+  bool mPropertiesChanged;
+  
+  void findProperties();
+  
   // Map between the property id's from the multiplayers network packets
   // and the property nodes
   typedef std::map<unsigned, SGSharedPtr<SGPropertyNode> > PropertyMap;

From 0d7769ae724986397205fbe9bf188f4bb5d49386 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 20 Oct 2010 00:07:54 +0100
Subject: [PATCH 21/45] Search aircraft dirs when loading AI models. Thanks to
 Thorsten Brehm for the catch.

---
 src/AIModel/AIBase.cxx | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/AIModel/AIBase.cxx b/src/AIModel/AIBase.cxx
index 8a073eb6d..514c6abb0 100644
--- a/src/AIModel/AIBase.cxx
+++ b/src/AIModel/AIBase.cxx
@@ -194,18 +194,27 @@ void FGAIBase::Transform() {
 }
 
 bool FGAIBase::init(bool search_in_AI_path) {
-    osg::ref_ptr<osgDB::ReaderWriter::Options> opt=
-        new osgDB::ReaderWriter::Options(*osgDB::Registry::instance()->getOptions());
-
+    
+    string f;
     if(search_in_AI_path)
     {
-        SGPath ai_path(globals->get_fg_root());
-        ai_path.append("AI");
-        opt->getDatabasePathList().push_front(ai_path.str());
+    // setup a modified Options strucutre, with only the $fg-root/AI defined;
+    // we'll check that first, then give the normal search logic a chance.
+    // this ensures that models in AI/ are preferred to normal models, where
+    // both exist.
+        osg::ref_ptr<osgDB::ReaderWriter::Options> 
+          opt(osg::clone(osgDB::Registry::instance()->getOptions(), osg::CopyOp::SHALLOW_COPY));
+
+        SGPath ai_path(globals->get_fg_root(), "AI");
+        opt->setDatabasePath(ai_path.str());
+        
+        f = osgDB::findDataFile(model_path, opt.get());
     }
 
-    string f = osgDB::findDataFile(model_path, opt.get());
-
+    if (f.empty()) {
+      f = simgear::SGModelLib::findDataFile(model_path);
+    }
+    
     if(f.empty())
         f = fgGetString("/sim/multiplay/default-model", default_model);
 

From dd2eec7bd885e4219d326eca27138ad2d9043da3 Mon Sep 17 00:00:00 2001
From: James Turner <jmt@James-Turners-MacBook-Pro.local>
Date: Sun, 11 Oct 2009 12:37:13 +0100
Subject: [PATCH 22/45] Airways/procedures code - add new data structures to
 store waypoints and procedures, and routing algorithms, and modify the GPS,
 route manager and WaypointList to use the new objects.

---
 src/Airports/runways.cxx                      |   30 +
 src/Airports/runways.hxx                      |   15 +
 src/Airports/simple.cxx                       |  243 +++
 src/Airports/simple.hxx                       |   65 +
 src/Autopilot/route_mgr.cxx                   | 1333 +++++++++++------
 src/Autopilot/route_mgr.hxx                   |  171 ++-
 src/GUI/MapWidget.cxx                         |   81 +-
 src/GUI/WaypointList.cxx                      |  218 ++-
 src/GUI/WaypointList.hxx                      |   16 +-
 src/GUI/dialog.cxx                            |   33 +
 src/GUI/dialog.hxx                            |   10 +-
 src/Instrumentation/Makefile.am               |    3 +-
 src/Instrumentation/gps.cxx                   |  434 +++---
 src/Instrumentation/gps.hxx                   |   29 +-
 src/Instrumentation/rnav_waypt_controller.cxx |  697 +++++++++
 src/Instrumentation/rnav_waypt_controller.hxx |  193 +++
 src/Instrumentation/testgps.cxx               |  130 +-
 src/Main/fg_init.cxx                          |    8 +-
 src/Navaids/Makefile.am                       |    8 +-
 src/Navaids/airways.cxx                       |  454 ++++++
 src/Navaids/airways.hxx                       |  134 ++
 src/Navaids/positioned.cxx                    |   27 +-
 src/Navaids/positioned.hxx                    |    6 +-
 src/Navaids/procedure.cxx                     |  333 ++++
 src/Navaids/procedure.hxx                     |  212 +++
 src/Navaids/route.cxx                         |  679 +++++++++
 src/Navaids/route.hxx                         |  208 +++
 src/Navaids/routePath.cxx                     |  346 +++++
 src/Navaids/routePath.hxx                     |   69 +
 src/Navaids/testnavs.cxx                      |   18 +
 src/Navaids/waypoint.cxx                      |  471 ++++++
 src/Navaids/waypoint.hxx                      |  314 ++++
 src/Scripting/NasalSys.cxx                    |   23 +
 33 files changed, 6136 insertions(+), 875 deletions(-)
 create mode 100644 src/Instrumentation/rnav_waypt_controller.cxx
 create mode 100644 src/Instrumentation/rnav_waypt_controller.hxx
 create mode 100644 src/Navaids/airways.cxx
 create mode 100644 src/Navaids/airways.hxx
 create mode 100644 src/Navaids/procedure.cxx
 create mode 100644 src/Navaids/procedure.hxx
 create mode 100644 src/Navaids/route.cxx
 create mode 100644 src/Navaids/route.hxx
 create mode 100644 src/Navaids/routePath.cxx
 create mode 100644 src/Navaids/routePath.hxx
 create mode 100644 src/Navaids/waypoint.cxx
 create mode 100644 src/Navaids/waypoint.hxx

diff --git a/src/Airports/runways.cxx b/src/Airports/runways.cxx
index 27caa4f6d..c3e48ecbb 100644
--- a/src/Airports/runways.cxx
+++ b/src/Airports/runways.cxx
@@ -37,6 +37,9 @@
 
 #include "runways.hxx"
 
+#include <Airports/simple.hxx>
+#include <Navaids/procedure.hxx>
+
 using std::string;
 
 static std::string cleanRunwayNo(const std::string& aRwyNo)
@@ -168,3 +171,30 @@ void FGRunway::setReciprocalRunway(FGRunway* other)
   _reciprocal = other;
 }
 
+std::vector<flightgear::SID*> FGRunway::getSIDs()
+{
+  std::vector<flightgear::SID*> result;
+  for (unsigned int i=0; i<_airport->numSIDs(); ++i) {
+    flightgear::SID* s = _airport->getSIDByIndex(i);
+    if (s->isForRunway(this)) {
+      result.push_back(s);
+    }
+  } // of SIDs at the airport iteration
+  
+  return result;
+}
+
+std::vector<flightgear::STAR*> FGRunway::getSTARs()
+{
+  std::vector<flightgear::STAR*> result;
+  for (unsigned int i=0; i<_airport->numSTARs(); ++i) {
+    flightgear::STAR* s = _airport->getSTARByIndex(i);
+    if (s->isForRunway(this)) {
+      result.push_back(s);
+    }
+  } // of STARs at the airport iteration
+  
+  return result;
+}
+
+
diff --git a/src/Airports/runways.hxx b/src/Airports/runways.hxx
index e6f97ea95..1c5ab85b1 100644
--- a/src/Airports/runways.hxx
+++ b/src/Airports/runways.hxx
@@ -33,6 +33,11 @@ class FGAirport;
 class FGNavRecord;
 class SGPropertyNode;
 
+namespace flightgear {
+  class SID;
+  class STAR;
+}
+
 class FGRunway : public FGRunwayBase
 {
   FGAirport* _airport;
@@ -115,6 +120,16 @@ public:
    * Helper to process property data loaded from an ICAO.threshold.xml file
    */
   void processThreshold(SGPropertyNode* aThreshold);
+  
+  /**
+   * Get SIDs (DPs) associated with this runway
+   */
+  std::vector<flightgear::SID*> getSIDs();
+  
+  /**
+   * Get STARs associared with this runway
+   */ 
+  std::vector<flightgear::STAR*> getSTARs();
 };
 
 #endif // _FG_RUNWAYS_HXX
diff --git a/src/Airports/simple.cxx b/src/Airports/simple.cxx
index a418bd414..f563cf1d0 100644
--- a/src/Airports/simple.cxx
+++ b/src/Airports/simple.cxx
@@ -45,6 +45,11 @@
 #include <Airports/pavement.hxx>
 #include <Airports/dynamics.hxx>
 #include <Airports/xmlloader.hxx>
+#include <Navaids/procedure.hxx>
+#include <Navaids/waypoint.hxx>
+
+using std::vector;
+using namespace flightgear;
 
 // magic import of a helper which uses FGPositioned internals
 extern char** searchAirportNamesAndIdents(const std::string& aFilter);
@@ -187,6 +192,30 @@ FGRunway* FGAirport::findBestRunwayForHeading(double aHeading) const
   return result;
 }
 
+FGRunway* FGAirport::findBestRunwayForPos(const SGGeod& aPos) const
+{
+  loadRunways();
+  
+  Runway_iterator it = mRunways.begin();
+  FGRunway* result = NULL;
+  double currentLowestDev = 180.0;
+  
+  for (; it != mRunways.end(); ++it) {
+    double inboundCourse = SGGeodesy::courseDeg(aPos, (*it)->end());
+    double dev = inboundCourse - (*it)->headingDeg();
+    SG_NORMALIZE_RANGE(dev, -180.0, 180.0);
+
+    dev = fabs(dev);
+    if (dev < currentLowestDev) { // new best match
+      currentLowestDev = dev;
+      result = *it;
+    }
+  } // of runway iteration
+  
+  return result;
+
+}
+
 bool FGAirport::hasHardRunwayOfLengthFt(double aLengthFt) const
 {
   loadRunways();
@@ -350,6 +379,23 @@ void FGAirport::loadTaxiways() const
   }
 }
 
+void FGAirport::loadProcedures() const
+{
+  if (mProceduresLoaded) {
+    return;
+  }
+  
+  mProceduresLoaded = true;
+  SGPath path;
+  if (!XMLLoader::findAirportData(ident(), "procedures", path)) {
+    SG_LOG(SG_GENERAL, SG_INFO, "no procedures data available for " << ident());
+    return;
+  }
+  
+  SG_LOG(SG_GENERAL, SG_INFO, ident() << ": loading procedures from " << path.str());
+  Route::loadAirportProcedures(path, const_cast<FGAirport*>(this));
+}
+
 void FGAirport::loadSceneryDefintions() const
 {  
   // allow users to disable the scenery data in the short-term
@@ -412,6 +458,203 @@ void FGAirport::readTowerData(SGPropertyNode* aRoot)
   _tower_location = SGGeod::fromDegM(lon, lat, elevM);
 }
 
+bool FGAirport::buildApproach(Waypt* aEnroute, STAR* aSTAR, FGRunway* aRwy, WayptVec& aRoute)
+{
+  loadProcedures();
+
+  if ((aRwy && (aRwy->airport() != this))) {
+    throw sg_exception("invalid parameters", "FGAirport::buildApproach");
+  }
+  
+  if (aSTAR) {
+    bool ok = aSTAR->route(aRwy, aEnroute, aRoute);
+    if (!ok) {
+      SG_LOG(SG_GENERAL, SG_WARN, ident() << ": build approach, STAR " << aSTAR->ident() 
+         << " failed to route from transition " << aEnroute->ident());
+      return false;
+    }
+  } else if (aEnroute) {
+    // no a STAR specified, just use enroute point directly
+    aRoute.push_back(aEnroute);
+  }
+  
+  if (!aRwy) {
+    // no runway selected yet, but we loaded the STAR, so that's fine, we're done
+    return true;
+  }
+  
+// build the approach (possibly including transition), and including the missed segment
+  vector<Approach*> aps;
+  for (unsigned int j=0; j<mApproaches.size();++j) {
+    if (mApproaches[j]->runway() == aRwy) {
+      aps.push_back(mApproaches[j]);
+    }
+  } // of approach filter by runway
+  
+  if (aps.empty()) {
+    SG_LOG(SG_GENERAL, SG_INFO, ident() << "; no approaches defined for runway " << aRwy->ident());
+    // could build a fallback approach here
+    return false;
+  }
+  
+  for (unsigned int k=0; k<aps.size(); ++k) {
+    if (aps[k]->route(aRoute.back(), aRoute)) {
+      return true;
+    }
+  } // of initial approach iteration
+  
+  SG_LOG(SG_GENERAL, SG_INFO, ident() << ": unable to find transition to runway "
+    << aRwy->ident() << ", assume vectors");
+  
+  WayptRef v(new ATCVectors(NULL, this));
+  aRoute.push_back(v);
+  return aps.front()->routeFromVectors(aRoute);
+}
+
+pair<SID*, WayptRef>
+FGAirport::selectSID(const SGGeod& aDest, FGRunway* aRwy)
+{
+  loadProcedures();
+  
+  WayptRef enroute;
+  SID* sid = NULL;
+  double d = 1e9;
+  
+  for (unsigned int i=0; i<mSIDs.size(); ++i) {
+    if (aRwy && !mSIDs[i]->isForRunway(aRwy)) {
+      continue;
+    }
+  
+    WayptRef e = mSIDs[i]->findBestTransition(aDest);
+    if (!e) {
+      continue; // strange, but let's not worry about it
+    }
+    
+    // assert(e->isFixedPosition());
+    double ed = SGGeodesy::distanceM(aDest, e->position());
+    if (ed < d) { // new best match
+      enroute = e;
+      d = ed;
+      sid = mSIDs[i];
+    }
+  } // of SID iteration
+  
+  if (!mSIDs.empty() && !sid) {
+    SG_LOG(SG_GENERAL, SG_INFO, ident() << "selectSID, no SID found (runway=" 
+      << (aRwy ? aRwy->ident() : "no runway preference"));
+  }
+  
+  return make_pair(sid, enroute);
+}
+    
+pair<STAR*, WayptRef>
+FGAirport::selectSTAR(const SGGeod& aOrigin, FGRunway* aRwy)
+{
+  loadProcedures();
+  
+  WayptRef enroute;
+  STAR* star = NULL;
+  double d = 1e9;
+  
+  for (unsigned int i=0; i<mSTARs.size(); ++i) {
+    if (!mSTARs[i]->isForRunway(aRwy)) {
+      continue;
+    }
+    
+    SG_LOG(SG_GENERAL, SG_INFO, "STAR " << mSTARs[i]->ident() << " is valid for runway");
+    WayptRef e = mSTARs[i]->findBestTransition(aOrigin);
+    if (!e) {
+      continue; // strange, but let's not worry about it
+    }
+    
+    // assert(e->isFixedPosition());
+    double ed = SGGeodesy::distanceM(aOrigin, e->position());
+    if (ed < d) { // new best match
+      enroute = e;
+      d = ed;
+      star = mSTARs[i];
+    }
+  } // of STAR iteration
+  
+  return make_pair(star, enroute);
+}
+
+
+void FGAirport::addSID(SID* aSid)
+{
+  mSIDs.push_back(aSid);
+}
+
+void FGAirport::addSTAR(STAR* aStar)
+{
+  mSTARs.push_back(aStar);
+}
+
+void FGAirport::addApproach(Approach* aApp)
+{
+  mApproaches.push_back(aApp);
+}
+
+unsigned int FGAirport::numSIDs() const
+{
+  loadProcedures();
+  return mSIDs.size();
+}
+
+SID* FGAirport::getSIDByIndex(unsigned int aIndex) const
+{
+  loadProcedures();
+  return mSIDs[aIndex];
+}
+
+SID* FGAirport::findSIDWithIdent(const std::string& aIdent) const
+{
+  loadProcedures();
+  for (unsigned int i=0; i<mSIDs.size(); ++i) {
+    if (mSIDs[i]->ident() == aIdent) {
+      return mSIDs[i];
+    }
+  }
+  
+  return NULL;
+}
+
+unsigned int FGAirport::numSTARs() const
+{
+  loadProcedures();
+  return mSTARs.size();
+}
+
+STAR* FGAirport::getSTARByIndex(unsigned int aIndex) const
+{
+  loadProcedures();
+  return mSTARs[aIndex];
+}
+
+STAR* FGAirport::findSTARWithIdent(const std::string& aIdent) const
+{
+  loadProcedures();
+  for (unsigned int i=0; i<mSTARs.size(); ++i) {
+    if (mSTARs[i]->ident() == aIdent) {
+      return mSTARs[i];
+    }
+  }
+  
+  return NULL;
+}
+
+unsigned int FGAirport::numApproaches() const
+{
+  loadProcedures();
+  return mApproaches.size();
+}
+
+Approach* FGAirport::getApproachByIndex(unsigned int aIndex) const
+{
+  loadProcedures();
+  return mApproaches[aIndex];
+}
+
 // get airport elevation
 double fgGetAirportElev( const string& id )
 {
diff --git a/src/Airports/simple.hxx b/src/Airports/simple.hxx
index 521c48c9a..1eea8d8ec 100644
--- a/src/Airports/simple.hxx
+++ b/src/Airports/simple.hxx
@@ -45,6 +45,19 @@ typedef SGSharedPtr<FGRunway> FGRunwayPtr;
 typedef SGSharedPtr<FGTaxiway> FGTaxiwayPtr;
 typedef SGSharedPtr<FGPavement> FGPavementPtr;
 
+namespace flightgear {
+  class SID;
+  class STAR;
+  class Approach;
+  class Waypt;
+
+
+  typedef SGSharedPtr<Waypt> WayptRef;
+  typedef std::vector<WayptRef> WayptVec;
+}
+
+
+
 /***************************************************************************************
  *
  **************************************************************************************/
@@ -85,6 +98,15 @@ public:
     FGRunway* getRunwayByIdent(const std::string& aIdent) const;
     FGRunway* findBestRunwayForHeading(double aHeading) const;
     
+    /**
+     * return the most likely target runway based on a position.
+     * Specifically, return the runway for which the course from aPos
+     * to the runway end, mostly closely matches the runway heading.
+     * This is a good approximation of which runway the position is on or
+     * aiming towards.
+     */
+    FGRunway* findBestRunwayForPos(const SGGeod& aPos) const;
+    
      /**
      * Useful predicate for FMS/GPS/NAV displays and similar - check if this
      * aiport has a hard-surfaced runway of at least the specified length.
@@ -143,6 +165,26 @@ public:
        double mMinLengthFt;
      };
      
+     
+     void setProcedures(const std::vector<flightgear::SID*>& aSids,
+      const std::vector<flightgear::STAR*>& aStars,
+      const std::vector<flightgear::Approach*>& aApproaches);
+     
+     void addSID(flightgear::SID* aSid);
+      void addSTAR(flightgear::STAR* aStar);
+      void addApproach(flightgear::Approach* aApp);
+
+      unsigned int numSIDs() const;
+      flightgear::SID* getSIDByIndex(unsigned int aIndex) const;
+      flightgear::SID* findSIDWithIdent(const std::string& aIdent) const;
+      
+      unsigned int numSTARs() const;
+      flightgear::STAR* getSTARByIndex(unsigned int aIndex) const;
+      flightgear::STAR* findSTARWithIdent(const std::string& aIdent) const;
+      
+      unsigned int numApproaches() const;
+      flightgear::Approach* getApproachByIndex(unsigned int aIndex) const;
+
      /**
       * Syntactic wrapper around FGPositioned::findClosest - find the closest
       * match for filter, and return it cast to FGAirport. The default filter
@@ -169,6 +211,23 @@ public:
       * matches in a format suitable for use by a puaList. 
       */
      static char** searchNamesAndIdents(const std::string& aFilter);
+     
+     bool buildApproach(flightgear::Waypt* aEnroute, flightgear::STAR* aSTAR, 
+      FGRunway* aRwy, flightgear::WayptVec& aRoute);
+    
+    /**
+     * Given a destiation point, select the best SID and transition waypt from 
+     * this airport. Returns (NULL,NULL) is no SIDs are defined, otherwise the
+     * best SID/transition is that which is closest to the destination point.
+     */
+    std::pair<flightgear::SID*, flightgear::WayptRef> selectSID(const SGGeod& aDest, FGRunway* aRwy);
+    
+    /**
+     * Select a STAR and enroute transition waypt, given an origin (departure) position.
+     * returns (NULL, NULL) is no suitable STAR is exists
+     */
+    std::pair<flightgear::STAR*, flightgear::WayptRef> selectSTAR(const SGGeod& aOrigin, FGRunway* aRwy);
+    
 private:
     typedef std::vector<FGRunwayPtr>::const_iterator Runway_iterator;
     /**
@@ -203,13 +262,19 @@ private:
 
     void loadRunways() const;
     void loadTaxiways() const;
+    void loadProcedures() const;
     
     mutable bool mRunwaysLoaded;
     mutable bool mTaxiwaysLoaded;
+    mutable bool mProceduresLoaded;
     
     std::vector<FGRunwayPtr> mRunways;
     std::vector<FGTaxiwayPtr> mTaxiways;
     std::vector<FGPavementPtr> mPavements;
+    
+    std::vector<flightgear::SID*> mSIDs;
+    std::vector<flightgear::STAR*> mSTARs;
+    std::vector<flightgear::Approach*> mApproaches;
 };
 
 // find basic airport location info from airport database
diff --git a/src/Autopilot/route_mgr.cxx b/src/Autopilot/route_mgr.cxx
index 07059cc16..1896946fc 100644
--- a/src/Autopilot/route_mgr.cxx
+++ b/src/Autopilot/route_mgr.cxx
@@ -36,6 +36,7 @@
 #include "route_mgr.hxx"
 
 #include <boost/algorithm/string/case_conv.hpp>
+#include <boost/tuple/tuple.hpp>
 
 #include <simgear/misc/strutils.hxx>
 #include <simgear/structure/exception.hxx>
@@ -48,27 +49,81 @@
 
 #include "Main/fg_props.hxx"
 #include "Navaids/positioned.hxx"
+#include <Navaids/waypoint.hxx>
+#include <Navaids/airways.hxx>
+#include <Navaids/procedure.hxx>
 #include "Airports/simple.hxx"
 #include "Airports/runways.hxx"
 
 #define RM "/autopilot/route-manager/"
 
-FGRouteMgr::FGRouteMgr() :
-    _route( new SGRoute ),
-    input(fgGetNode( RM "input", true )),
-    mirror(fgGetNode( RM "route", true ))
+#include <GUI/new_gui.hxx>
+#include <GUI/dialog.hxx>
+
+using namespace flightgear;
+
+class PropertyWatcher : public SGPropertyChangeListener
 {
-    listener = new InputListener(this);
-    input->setStringValue("");
-    input->addChangeListener(listener);
+public:
+  void watch(SGPropertyNode* p)
+  {
+    p->addChangeListener(this, false);
+  }
+
+  virtual void valueChanged(SGPropertyNode*)
+  {
+    fire();
+  }
+protected:
+  virtual void fire() = 0;
+};
+
+/**
+ * Template adapter, created by convenience helper below
+ */
+template <class T>
+class MethodPropertyWatcher : public PropertyWatcher
+{
+public:
+  typedef void (T::*fire_method)();
+
+  MethodPropertyWatcher(T* obj, fire_method m) :
+    _object(obj),
+    _method(m)
+  { ; }
+  
+protected:
+  virtual void fire()
+  { // dispatch to the object method we're helping
+    (_object->*_method)();
+  }
+  
+private:
+  T* _object;
+  fire_method _method;
+};
+
+template <class T>
+PropertyWatcher* createWatcher(T* obj, void (T::*m)())
+{
+  return new MethodPropertyWatcher<T>(obj, m);
+}
+
+FGRouteMgr::FGRouteMgr() :
+  _currentIndex(0),
+  input(fgGetNode( RM "input", true )),
+  mirror(fgGetNode( RM "route", true ))
+{
+  listener = new InputListener(this);
+  input->setStringValue("");
+  input->addChangeListener(listener);
 }
 
 
-FGRouteMgr::~FGRouteMgr() {
-    input->removeChangeListener(listener);
-    
-    delete listener;
-    delete _route;
+FGRouteMgr::~FGRouteMgr()
+{
+  input->removeChangeListener(listener);
+  delete listener;
 }
 
 
@@ -85,18 +140,13 @@ void FGRouteMgr::init() {
     &FGRouteMgr::getDepartureICAO, &FGRouteMgr::setDepartureICAO));
   departure->tie("name", SGRawValueMethods<FGRouteMgr, const char*>(*this, 
     &FGRouteMgr::getDepartureName, NULL));
-    
-// init departure information from current location
-  SGGeod pos = SGGeod::fromDegFt(lon->getDoubleValue(), lat->getDoubleValue(), alt->getDoubleValue());
-  _departure = FGAirport::findClosest(pos, 20.0);
-  if (_departure) {
-    FGRunway* active = _departure->getActiveRunwayForUsage();
-    departure->setStringValue("runway", active->ident().c_str());
-  } else {
-    departure->setStringValue("runway", "");
-  }
+  departure->setStringValue("runway", "");
+  
+  _departureWatcher = createWatcher(this, &FGRouteMgr::departureChanged);
+  _departureWatcher->watch(departure->getChild("runway"));
   
   departure->getChild("etd", 0, true);
+  _departureWatcher->watch(departure->getChild("sid", 0, true));
   departure->getChild("takeoff-time", 0, true);
 
   destination = fgGetNode(RM "destination", true);
@@ -106,11 +156,15 @@ void FGRouteMgr::init() {
     &FGRouteMgr::getDestinationICAO, &FGRouteMgr::setDestinationICAO));
   destination->tie("name", SGRawValueMethods<FGRouteMgr, const char*>(*this, 
     &FGRouteMgr::getDestinationName, NULL));
-    
-  destination->getChild("runway", 0, true);
-  destination->getChild("eta", 0, true);
-  destination->getChild("touchdown-time", 0, true);
   
+  _arrivalWatcher = createWatcher(this, &FGRouteMgr::arrivalChanged);
+  _arrivalWatcher->watch(destination->getChild("runway", 0, true));
+  
+  destination->getChild("eta", 0, true);
+  _arrivalWatcher->watch(destination->getChild("star", 0, true));
+  _arrivalWatcher->watch(destination->getChild("transition", 0, true));
+  destination->getChild("touchdown-time", 0, true);
+
   alternate = fgGetNode(RM "alternate", true);
   alternate->getChild("airport", 0, true);
   alternate->getChild("runway", 0, true);
@@ -122,6 +176,9 @@ void FGRouteMgr::init() {
   cruise->getChild("speed-kts", 0, true);
   cruise->setDoubleValue("speed-kts", 160.0);
   
+  _routingType = cruise->getChild("routing", 0, true);
+  _routingType->setIntValue(ROUTE_HIGH_AIRWAYS);
+  
   totalDistance = fgGetNode(RM "total-distance", true);
   totalDistance->setDoubleValue(0.0);
   
@@ -142,7 +199,7 @@ void FGRouteMgr::init() {
   
   _currentWpt = fgGetNode(RM "current-wp", true);
   _currentWpt->tie(SGRawValueMethods<FGRouteMgr, int>
-    (*this, &FGRouteMgr::currentWaypoint, &FGRouteMgr::jumpToIndex));
+    (*this, &FGRouteMgr::currentIndex, &FGRouteMgr::jumpToIndex));
       
   // temporary distance / eta calculations, for backward-compatability
   wp0 = fgGetNode(RM "wp", 0, true);
@@ -160,27 +217,29 @@ void FGRouteMgr::init() {
   wpn->getChild("dist", 0, true);
   wpn->getChild("eta", 0, true);
   
-  _route->clear();
-  _route->set_current(0);
   update_mirror();
-  
   _pathNode = fgGetNode(RM "file-path", 0, true);
 }
 
 
-void FGRouteMgr::postinit() {
-    string_list *waypoints = globals->get_initial_waypoints();
-    if (waypoints) {
-      vector<string>::iterator it;
-      for (it = waypoints->begin(); it != waypoints->end(); ++it)
-        new_waypoint(*it);
+void FGRouteMgr::postinit()
+{
+  string_list *waypoints = globals->get_initial_waypoints();
+  if (waypoints) {
+    string_list::iterator it;
+    for (it = waypoints->begin(); it != waypoints->end(); ++it) {
+      WayptRef w = waypointFromString(*it);
+      if (w) {
+        _route.push_back(w);
+      }
     }
-
-    weightOnWheels = fgGetNode("/gear/gear[0]/wow", false);
-    // check airbone flag agrees with presets
     
-}
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "loaded initial waypoints:" << _route.size());
+  }
 
+  weightOnWheels = fgGetNode("/gear/gear[0]/wow", false);
+  // check airbone flag agrees with presets
+}
 
 void FGRouteMgr::bind() { }
 void FGRouteMgr::unbind() { }
@@ -190,260 +249,604 @@ bool FGRouteMgr::isRouteActive() const
   return active->getBoolValue();
 }
 
-void FGRouteMgr::update( double dt ) {
-    if (dt <= 0.0) {
-      // paused, nothing to do here
-      return;
-    }
-  
-    if (!active->getBoolValue()) {
-      return;
-    }
-    
-    double groundSpeed = fgGetDouble("/velocities/groundspeed-kt", 0.0);
-    if (airborne->getBoolValue()) {
-      time_t now = time(NULL);
-      elapsedFlightTime->setDoubleValue(difftime(now, _takeoffTime));
-    } else { // not airborne
-      if (weightOnWheels->getBoolValue() || (groundSpeed < 40)) {
-        return;
-      }
-      
-      airborne->setBoolValue(true);
-      _takeoffTime = time(NULL); // start the clock
-      departure->setIntValue("takeoff-time", _takeoffTime);
-    }
-    
-  // basic course/distance information
-    double wp_course, wp_distance;
-    SGWayPoint wp = _route->get_current();
-    wp.CourseAndDistance( lon->getDoubleValue(), lat->getDoubleValue(),
-                          alt->getDoubleValue(), &wp_course, &wp_distance );
-
-  // update wp0 / wp1 / wp-last for legacy users
-    wp0->setDoubleValue("dist", wp_distance * SG_METER_TO_NM);
-    wp_course -= magvar->getDoubleValue(); // expose magnetic bearing
-    wp0->setDoubleValue("bearing-deg", wp_course);
-    setETAPropertyFromDistance(wp0->getChild("eta"), wp_distance);
-    
-    if ((_route->current_index() + 1) < _route->size()) {
-      wp = _route->get_waypoint(_route->current_index() + 1);
-      double wp1_course, wp1_distance;
-      wp.CourseAndDistance(lon->getDoubleValue(), lat->getDoubleValue(),
-                          alt->getDoubleValue(), &wp1_course, &wp1_distance);
-    
-      wp1->setDoubleValue("dist", wp1_distance * SG_METER_TO_NM);
-      setETAPropertyFromDistance(wp1->getChild("eta"), wp1_distance);
-    }
-    
-    double totalDistanceRemaining = wp_distance; // distance to current waypoint
-    for (int i=_route->current_index() + 1; i<_route->size(); ++i) {
-      totalDistanceRemaining += _route->get_waypoint(i).get_distance();
-    }
-    
-    wpn->setDoubleValue("dist", totalDistanceRemaining * SG_METER_TO_NM);
-    ete->setDoubleValue(totalDistanceRemaining * SG_METER_TO_NM / groundSpeed * 3600.0);
-    setETAPropertyFromDistance(wpn->getChild("eta"), totalDistanceRemaining);
-    
-    // get time now at destination tz as tm struct
-    // add ete seconds
-    // convert to string ... and stash in property
-    //destination->setDoubleValue("eta", eta);
-}
-
-
-void FGRouteMgr::setETAPropertyFromDistance(SGPropertyNode_ptr aProp, double aDistance) {
-    double speed =fgGetDouble("/velocities/groundspeed-kt", 0.0);
-    if (speed < 1.0) {
-      aProp->setStringValue("--:--");
-      return;
-    }
-  
-    char eta_str[64];
-    double eta = aDistance * SG_METER_TO_NM / speed;
-    if ( eta >= 100.0 ) { 
-        eta = 99.999; // clamp
-    }
-    
-    if ( eta < (1.0/6.0) ) {
-      eta *= 60.0; // within 10 minutes, bump up to min/secs
-    }
-    
-    int major = (int)eta, 
-        minor = (int)((eta - (int)eta) * 60.0);
-    snprintf( eta_str, 64, "%d:%02d", major, minor );
-    aProp->setStringValue( eta_str );
-}
-
-void FGRouteMgr::add_waypoint( const SGWayPoint& wp, int n )
+void FGRouteMgr::update( double dt )
 {
-  _route->add_waypoint( wp, n );
-    
-  if ((n >= 0) && (_route->current_index() > n)) {
-    _route->set_current(_route->current_index() + 1);
+  if (dt <= 0.0) {
+    return; // paused, nothing to do here
   }
   
-  waypointsChanged();
+  double groundSpeed = fgGetDouble("/velocities/groundspeed-kt", 0.0);
+  if (airborne->getBoolValue()) {
+    time_t now = time(NULL);
+    elapsedFlightTime->setDoubleValue(difftime(now, _takeoffTime));
+  } else { // not airborne
+    if (weightOnWheels->getBoolValue() || (groundSpeed < 40)) {
+      return;
+    }
+    
+    airborne->setBoolValue(true);
+    _takeoffTime = time(NULL); // start the clock
+    departure->setIntValue("takeoff-time", _takeoffTime);
+  }
+  
+  if (!active->getBoolValue()) {
+    return;
+  }
+
+// basic course/distance information
+  SGGeod currentPos = SGGeod::fromDegFt(lon->getDoubleValue(), 
+    lat->getDoubleValue(),alt->getDoubleValue());
+
+  Waypt* curWpt = currentWaypt();
+  if (!curWpt) {
+    return;
+  }
+  
+  double courseDeg;
+  double distanceM;
+  boost::tie(courseDeg, distanceM) = curWpt->courseAndDistanceFrom(currentPos);
+  
+// update wp0 / wp1 / wp-last for legacy users
+  wp0->setDoubleValue("dist", distanceM * SG_METER_TO_NM);
+  courseDeg -= magvar->getDoubleValue(); // expose magnetic bearing
+  wp0->setDoubleValue("bearing-deg", courseDeg);
+  setETAPropertyFromDistance(wp0->getChild("eta"), distanceM);
+  
+  double totalDistanceRemaining = distanceM; // distance to current waypoint
+  
+  Waypt* nextWpt = nextWaypt();
+  if (nextWpt) {
+    boost::tie(courseDeg, distanceM) = nextWpt->courseAndDistanceFrom(currentPos);
+     
+    wp1->setDoubleValue("dist", distanceM * SG_METER_TO_NM);
+    courseDeg -= magvar->getDoubleValue(); // expose magnetic bearing
+    wp1->setDoubleValue("bearing-deg", courseDeg);
+    setETAPropertyFromDistance(wp1->getChild("eta"), distanceM);
+  }
+  
+  Waypt* prev = curWpt;
+  for (unsigned int i=_currentIndex + 1; i<_route.size(); ++i) {
+    Waypt* w = _route[i];
+    if (w->flag(WPT_DYNAMIC)) continue;
+    totalDistanceRemaining += SGGeodesy::distanceM(prev->position(), w->position());
+    prev = w;
+  }
+  
+  wpn->setDoubleValue("dist", totalDistanceRemaining * SG_METER_TO_NM);
+  ete->setDoubleValue(totalDistanceRemaining * SG_METER_TO_NM / groundSpeed * 3600.0);
+  setETAPropertyFromDistance(wpn->getChild("eta"), totalDistanceRemaining);
 }
 
-void FGRouteMgr::waypointsChanged()
+void FGRouteMgr::setETAPropertyFromDistance(SGPropertyNode_ptr aProp, double aDistance)
 {
-  double routeDistanceNm = _route->total_distance() * SG_METER_TO_NM;
-  totalDistance->setDoubleValue(routeDistanceNm);
-  double cruiseSpeedKts = cruise->getDoubleValue("speed", 0.0);
-  if (cruiseSpeedKts > 1.0) {
-    // very very crude approximation, doesn't allow for climb / descent
-    // performance or anything else at all
-    ete->setDoubleValue(routeDistanceNm / cruiseSpeedKts * (60.0 * 60.0));
+  double speed = fgGetDouble("/velocities/groundspeed-kt", 0.0);
+  if (speed < 1.0) {
+    aProp->setStringValue("--:--");
+    return;
+  }
+
+  char eta_str[64];
+  double eta = aDistance * SG_METER_TO_NM / speed;
+  if ( eta >= 100.0 ) { 
+      eta = 99.999; // clamp
+  }
+  
+  if ( eta < (1.0/6.0) ) {
+    eta *= 60.0; // within 10 minutes, bump up to min/secs
+  }
+  
+  int major = (int)eta, 
+      minor = (int)((eta - (int)eta) * 60.0);
+  snprintf( eta_str, 64, "%d:%02d", major, minor );
+  aProp->setStringValue( eta_str );
+}
+
+flightgear::WayptRef FGRouteMgr::removeWayptAtIndex(int aIndex)
+{
+  int index = aIndex;
+  if (aIndex < 0) { // negative indices count the the end
+    index = _route.size() -  index;
+  }
+  
+  if ((index < 0) || (index >= numWaypts())) {
+    SG_LOG(SG_AUTOPILOT, SG_WARN, "removeWayptAtIndex with invalid index:" << aIndex);
+    return NULL;
+  }
+  
+  if (_currentIndex > index) {
+    --_currentIndex; // shift current index down if necessary
+  }
+
+  WayptVec::iterator it = _route.begin();
+  it += index;
+  
+  WayptRef w = *it; // hold a ref now, in case _route is the only other owner
+  _route.erase(it);
+  
+  update_mirror();
+  _edited->fireValueChanged();
+  checkFinished();
+  
+  return w;
+}
+  
+void FGRouteMgr::clearRoute()
+{
+  _route.clear();
+  _currentIndex = -1;
+  
+  update_mirror();
+  active->setBoolValue(false);
+  _edited->fireValueChanged();
+}
+
+/**
+ * route between index-1 and index, using airways.
+ */
+bool FGRouteMgr::routeToIndex(int index, RouteType aRouteType)
+{
+  WayptRef wp1;
+  WayptRef wp2;
+  
+  if (index == -1) {
+    index = _route.size(); // can still be zero, of course
+  }
+  
+  if (index == 0) {
+    if (!_departure) {
+      SG_LOG(SG_AUTOPILOT, SG_WARN, "routeToIndex: no departure set");
+      return false;
+    }
+    
+    wp1 = new NavaidWaypoint(_departure.get(), NULL);
+  } else {
+    wp1 = wayptAtIndex(index - 1);
+  }
+  
+  if (index >= numWaypts()) {
+    if (!_destination) {
+      SG_LOG(SG_AUTOPILOT, SG_WARN, "routeToIndex: no destination set");
+      return false;
+    }
+    
+    wp2 = new NavaidWaypoint(_destination.get(), NULL);
+  } else {
+    wp2 = wayptAtIndex(index);
+  }
+  
+  double distNm = SGGeodesy::distanceNm(wp1->position(), wp2->position());
+  if (distNm < 100.0) {
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "routeToIndex: existing waypoints are nearby, direct route");
+    return true;
+  }
+  
+  WayptVec r;
+  switch (aRouteType) {
+  case ROUTE_HIGH_AIRWAYS:
+    Airway::highLevel()->route(wp1, wp2, r);
+    break;
+    
+  case ROUTE_LOW_AIRWAYS:
+    Airway::lowLevel()->route(wp1, wp2, r);
+    break;
+    
+  case ROUTE_VOR:
+    throw sg_exception("VOR routing not supported yet");
+  }
+  
+  if (r.empty()) {
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "routeToIndex: no route found");
+    return false;
+  }
+
+  WayptVec::iterator it = _route.begin();
+  it += index;
+  _route.insert(it, r.begin(), r.end());
+
+  update_mirror();
+  _edited->fireValueChanged();
+  return true;
+}
+
+void FGRouteMgr::autoRoute()
+{
+  if (!_departure || !_destination) {
+    return;
+  }
+  
+  string runwayId(departure->getStringValue("runway"));
+  FGRunway* runway = NULL;
+  if (_departure->hasRunwayWithIdent(runwayId)) {
+    runway = _departure->getRunwayByIdent(runwayId);
+  }
+  
+  FGRunway* dstRunway = NULL;
+  runwayId = destination->getStringValue("runway");
+  if (_destination->hasRunwayWithIdent(runwayId)) {
+    dstRunway = _destination->getRunwayByIdent(runwayId);
+  }
+    
+  _route.clear(); // clear out the existing, first
+// SID
+  SID* sid;
+  WayptRef sidTrans;
+  
+  boost::tie(sid, sidTrans) = _departure->selectSID(_destination->geod(), runway);
+  if (sid) { 
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "selected SID " << sid->ident());
+    if (sidTrans) {
+      SG_LOG(SG_AUTOPILOT, SG_INFO, "\tvia " << sidTrans->ident() << " transition");
+    }
+    
+    sid->route(runway, sidTrans, _route);
+    departure->setStringValue("sid", sid->ident());
+  } else {
+    // use airport location for airway search
+    sidTrans = new NavaidWaypoint(_departure.get(), NULL);
+    departure->setStringValue("sid", "");
+  }
+  
+// STAR
+  destination->setStringValue("transition", "");
+  destination->setStringValue("star", "");
+  
+  STAR* star;
+  WayptRef starTrans;
+  boost::tie(star, starTrans) = _destination->selectSTAR(_departure->geod(), dstRunway);
+  if (star) {
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "selected STAR " << star->ident());
+    if (starTrans) {
+      SG_LOG(SG_AUTOPILOT, SG_INFO, "\tvia " << starTrans->ident() << " transition");
+      destination->setStringValue("transition", starTrans->ident());
+    }    
+    destination->setStringValue("star", star->ident());
+  } else {
+    // use airport location for search
+    starTrans = new NavaidWaypoint(_destination.get(), NULL);
+  }
+  
+// route between them
+  WayptVec airwayRoute;
+  if (Airway::highLevel()->route(sidTrans, starTrans, airwayRoute)) {
+    _route.insert(_route.end(), airwayRoute.begin(), airwayRoute.end());
+  }
+  
+// add the STAR if we have one
+  if (star) {
+    _destination->buildApproach(starTrans, star, dstRunway, _route);
   }
 
   update_mirror();
   _edited->fireValueChanged();
-  checkFinished();
 }
 
-SGWayPoint FGRouteMgr::pop_waypoint( int n ) {
-  if ( _route->size() <= 0 ) {
-    return SGWayPoint();
+void FGRouteMgr::departureChanged()
+{
+// remove existing departure waypoints
+  WayptVec::iterator it = _route.begin();
+  for (; it != _route.end(); ++it) {
+    if (!(*it)->flag(WPT_DEPARTURE)) {
+      break;
+    }
   }
   
-  if ( n < 0 ) {
-    n = _route->size() - 1;
-  }
-  
-  if (_route->current_index() > n) {
-    _route->set_current(_route->current_index() - 1);
+  // erase() invalidates iterators, so grab now
+  WayptRef enroute;
+  if (it == _route.end()) {
+    if (_destination) {
+      enroute = new NavaidWaypoint(_destination.get(), NULL);
+    }
+  } else {
+    enroute = *it;
   }
 
-  SGWayPoint wp = _route->get_waypoint(n);
-  _route->delete_waypoint(n);
-    
+  _route.erase(_route.begin(), it);
+  if (!_departure) {
+    waypointsChanged();
+    return;
+  }
+  
+  WayptVec wps;
+  buildDeparture(enroute, wps);
+  for (it = wps.begin(); it != wps.end(); ++it) {
+    (*it)->setFlag(WPT_DEPARTURE);
+    (*it)->setFlag(WPT_GENERATED);
+  }
+  _route.insert(_route.begin(), wps.begin(), wps.end());
+  
+  update_mirror();
   waypointsChanged();
-  return wp;
 }
 
+void FGRouteMgr::buildDeparture(WayptRef enroute, WayptVec& wps)
+{
+  string runwayId(departure->getStringValue("runway"));
+  if (!_departure->hasRunwayWithIdent(runwayId)) {
+// valid airport, but no runway selected, so just the airport noide itself
+    wps.push_back(new NavaidWaypoint(_departure.get(), NULL));
+    return;
+  }
+  
+  FGRunway* r = _departure->getRunwayByIdent(runwayId);
+  string sidId = departure->getStringValue("sid");
+  SID* sid = _departure->findSIDWithIdent(sidId);
+  if (!sid) {
+// valid runway, but no SID selected/found, so just the runway node for now
+    if (!sidId.empty() && (sidId != "(none)")) {
+      SG_LOG(SG_AUTOPILOT, SG_INFO, "SID not found:" << sidId);
+    }
+    
+    wps.push_back(new RunwayWaypt(r, NULL));
+    return;
+  }
+  
+// we have a valid SID, awesome
+  string trans(departure->getStringValue("transition"));
+  WayptRef t = sid->findTransitionByName(trans);
+  if (!t && enroute) {
+    t = sid->findBestTransition(enroute->position());
+  }
 
-bool FGRouteMgr::build() {
-    return true;
+  sid->route(r, t, wps);
+  if (!wps.empty() && wps.front()->flag(WPT_DYNAMIC)) {
+    // ensure first waypoint is static, to simplify other computations
+    wps.insert(wps.begin(), new RunwayWaypt(r, NULL));
+  }
 }
 
-
-void FGRouteMgr::new_waypoint( const string& target, int n ) {
-    SGWayPoint* wp = make_waypoint( target );
-    if (!wp) {
-        return;
+void FGRouteMgr::arrivalChanged()
+{  
+  // remove existing arrival waypoints
+  WayptVec::reverse_iterator rit = _route.rbegin();
+  for (; rit != _route.rend(); ++rit) {
+    if (!(*rit)->flag(WPT_ARRIVAL)) {
+      break;
     }
-    
-    add_waypoint( *wp, n );
-    delete wp;
+  }
+  
+  // erase() invalidates iterators, so grab now
+  WayptRef enroute;
+  WayptVec::iterator it;
+  
+  if (rit != _route.rend()) {
+    enroute = *rit;
+    it = rit.base(); // convert to fwd iterator
+  } else {
+    it = _route.begin();
+  }
+
+  _route.erase(it, _route.end());
+  
+  WayptVec wps;
+  buildArrival(enroute, wps);
+  for (it = wps.begin(); it != wps.end(); ++it) {
+    (*it)->setFlag(WPT_ARRIVAL);
+    (*it)->setFlag(WPT_GENERATED);
+  }
+  _route.insert(_route.end(), wps.begin(), wps.end());
+  
+  update_mirror();
+  waypointsChanged();
 }
 
+void FGRouteMgr::buildArrival(WayptRef enroute, WayptVec& wps)
+{
+  if (!_destination) {
+    return;
+  }
+  
+  string runwayId(destination->getStringValue("runway"));
+  if (!_destination->hasRunwayWithIdent(runwayId)) {
+// valid airport, but no runway selected, so just the airport node itself
+    wps.push_back(new NavaidWaypoint(_destination.get(), NULL));
+    return;
+  }
+  
+  FGRunway* r = _destination->getRunwayByIdent(runwayId);
+  string starId = destination->getStringValue("star");
+  STAR* star = _destination->findSTARWithIdent(starId);
+  if (!star) {
+// valid runway, but no STAR selected/found, so just the runway node for now
+    wps.push_back(new RunwayWaypt(r, NULL));
+    return;
+  }
+  
+// we have a valid STAR
+  string trans(destination->getStringValue("transition"));
+  WayptRef t = star->findTransitionByName(trans);
+  if (!t && enroute) {
+    t = star->findBestTransition(enroute->position());
+  }
+  
+  _destination->buildApproach(t, star, r, wps);
+}
 
-SGWayPoint* FGRouteMgr::make_waypoint(const string& tgt ) {
-    string target(boost::to_upper_copy(tgt));
+void FGRouteMgr::waypointsChanged()
+{
+
+}
+
+void FGRouteMgr::insertWayptAtIndex(Waypt* aWpt, int aIndex)
+{
+  if (!aWpt) {
+    return;
+  }
+  
+  int index = aIndex;
+  if ((aIndex == -1) || (aIndex > _route.size())) {
+    index = _route.size();
+  }
+  
+  WayptVec::iterator it = _route.begin();
+  it += index;
+      
+  if (_currentIndex > index) {
+    ++_currentIndex;
+  }
+  
+  _route.insert(it, aWpt);
+  
+  update_mirror();
+  _edited->fireValueChanged();
+}
+
+WayptRef FGRouteMgr::waypointFromString(const string& tgt )
+{
+  string target(boost::to_upper_copy(tgt));
+  WayptRef wpt;
+  
+// extract altitude
+  double altFt = cruise->getDoubleValue("altitude-ft");
+  RouteRestriction altSetting = RESTRICT_NONE;
     
+  size_t pos = target.find( '@' );
+  if ( pos != string::npos ) {
+    altFt = atof( target.c_str() + pos + 1 );
+    target = target.substr( 0, pos );
+    if ( !strcmp(fgGetString("/sim/startup/units"), "meter") )
+      altFt *= SG_METER_TO_FEET;
+    altSetting = RESTRICT_AT;
+  }
+
+// check for lon,lat
+  pos = target.find( ',' );
+  if ( pos != string::npos ) {
+    double lon = atof( target.substr(0, pos).c_str());
+    double lat = atof( target.c_str() + pos + 1);
+    char buf[32];
+    char ew = (lon < 0.0) ? 'W' : 'E';
+    char ns = (lat < 0.0) ? 'S' : 'N';
+    snprintf(buf, 32, "%c%03d%c%03d", ew, (int) fabs(lon), ns, (int)fabs(lat));
     
-    double alt = -9999.0;
-    // extract altitude
-    size_t pos = target.find( '@' );
-    if ( pos != string::npos ) {
-        alt = atof( target.c_str() + pos + 1 );
-        target = target.substr( 0, pos );
-        if ( !strcmp(fgGetString("/sim/startup/units"), "feet") )
-            alt *= SG_FEET_TO_METER;
+    wpt = new BasicWaypt(SGGeod::fromDeg(lon, lat), buf, NULL);
+    if (altSetting != RESTRICT_NONE) {
+      wpt->setAltitude(altFt, altSetting);
     }
+    return wpt;
+  }
 
-    // check for lon,lat
-    pos = target.find( ',' );
-    if ( pos != string::npos ) {
-        double lon = atof( target.substr(0, pos).c_str());
-        double lat = atof( target.c_str() + pos + 1);
-        char buf[32];
-        char ew = (lon < 0.0) ? 'W' : 'E';
-        char ns = (lat < 0.0) ? 'S' : 'N';
-        snprintf(buf, 32, "%c%03d%c%03d", ew, (int) fabs(lon), ns, (int)fabs(lat));
-        return new SGWayPoint( lon, lat, alt, SGWayPoint::WGS84, buf);
-    }    
-
-    SGGeod basePosition;
-    if (_route->size() > 0) {
-        SGWayPoint wp = get_waypoint(_route->size()-1);
-        basePosition = wp.get_target();
-    } else {
-        // route is empty, use current position
-        basePosition = SGGeod::fromDeg(
-            fgGetNode("/position/longitude-deg")->getDoubleValue(), 
-            fgGetNode("/position/latitude-deg")->getDoubleValue());
-    }
+  SGGeod basePosition;
+  if (_route.empty()) {
+    // route is empty, use current position
+    basePosition = SGGeod::fromDeg(lon->getDoubleValue(), lat->getDoubleValue());
+  } else {
+    basePosition = _route.back()->position();
+  }
     
-    vector<string> pieces(simgear::strutils::split(target, "/"));
+  string_list pieces(simgear::strutils::split(target, "/"));
+  FGPositionedRef p = FGPositioned::findClosestWithIdent(pieces.front(), basePosition);
+  if (!p) {
+    SG_LOG( SG_AUTOPILOT, SG_INFO, "Unable to find FGPositioned with ident:" << pieces.front());
+    return NULL;
+  }
 
-
-    FGPositionedRef p = FGPositioned::findClosestWithIdent(pieces.front(), basePosition);
-    if (!p) {
-      SG_LOG( SG_AUTOPILOT, SG_INFO, "Unable to find FGPositioned with ident:" << pieces.front());
+  if (pieces.size() == 1) {
+    wpt = new NavaidWaypoint(p, NULL);
+  } else if (pieces.size() == 3) {
+    // navaid/radial/distance-nm notation
+    double radial = atof(pieces[1].c_str()),
+      distanceNm = atof(pieces[2].c_str());
+    radial += magvar->getDoubleValue(); // convert to true bearing
+    wpt = new OffsetNavaidWaypoint(p, NULL, radial, distanceNm);
+  } else if (pieces.size() == 2) {
+    FGAirport* apt = dynamic_cast<FGAirport*>(p.ptr());
+    if (!apt) {
+      SG_LOG(SG_AUTOPILOT, SG_INFO, "Waypoint is not an airport:" << pieces.front());
       return NULL;
     }
     
-    SGGeod geod = SGGeod::fromGeodM(p->geod(), alt);
-    if (pieces.size() == 1) {
-      // simple case
-      return new SGWayPoint(geod, target, p->name());
+    if (!apt->hasRunwayWithIdent(pieces[1])) {
+      SG_LOG(SG_AUTOPILOT, SG_INFO, "No runway: " << pieces[1] << " at " << pieces[0]);
+      return NULL;
     }
-        
-    if (pieces.size() == 3) {
-      // navaid/radial/distance-nm notation
-      double radial = atof(pieces[1].c_str()),
-        distanceNm = atof(pieces[2].c_str()),
-        az2;
-      radial += magvar->getDoubleValue(); // convert to true bearing
-      SGGeod offsetPos;
-      SGGeodesy::direct(geod, radial, distanceNm * SG_NM_TO_METER, offsetPos, az2);
-      offsetPos.setElevationM(alt);
       
-      SG_LOG(SG_AUTOPILOT, SG_INFO, "final offset radial is " << radial);
-      return new SGWayPoint(offsetPos, p->ident() + pieces[2], target);
-    }
-    
-    if (pieces.size() == 2) {
-      FGAirport* apt = dynamic_cast<FGAirport*>(p.ptr());
-      if (!apt) {
-        SG_LOG(SG_AUTOPILOT, SG_INFO, "Waypoint is not an airport:" << pieces.front());
-        return NULL;
-      }
-      
-      if (!apt->hasRunwayWithIdent(pieces[1])) {
-        SG_LOG(SG_AUTOPILOT, SG_INFO, "No runway: " << pieces[1] << " at " << pieces[0]);
-        return NULL;
-      }
-      
-      FGRunway* runway = apt->getRunwayByIdent(pieces[1]);
-      SGGeod t = runway->threshold();
-      return new SGWayPoint(t.getLongitudeDeg(), t.getLatitudeDeg(), alt, SGWayPoint::WGS84, pieces[1]);
+    FGRunway* runway = apt->getRunwayByIdent(pieces[1]);
+    wpt = new NavaidWaypoint(runway, NULL);
+  } else if (pieces.size() == 4) {
+    // navid/radial/navid/radial notation     
+    FGPositionedRef p2 = FGPositioned::findClosestWithIdent(pieces[2], basePosition);
+    if (!p2) {
+      SG_LOG( SG_AUTOPILOT, SG_INFO, "Unable to find FGPositioned with ident:" << pieces[2]);
+      return NULL;
+    }
+
+    double r1 = atof(pieces[1].c_str()),
+      r2 = atof(pieces[3].c_str());
+    r1 += magvar->getDoubleValue();
+    r2 += magvar->getDoubleValue();
+    
+    SGGeod intersection;
+    bool ok = SGGeodesy::radialIntersection(p->geod(), r1, p2->geod(), r2, intersection);
+    if (!ok) {
+      SG_LOG(SG_AUTOPILOT, SG_INFO, "no valid intersection for:" << target);
+      return NULL;
     }
     
+    std::string name = p->ident() + "-" + p2->ident();
+    wpt = new BasicWaypt(intersection, name, NULL);
+  }
+  
+  if (!wpt) {
     SG_LOG(SG_AUTOPILOT, SG_INFO, "Unable to parse waypoint:" << target);
     return NULL;
+  }
+  
+  if (altSetting != RESTRICT_NONE) {
+    wpt->setAltitude(altFt, altSetting);
+  }
+  return wpt;
 }
 
-
 // mirror internal route to the property system for inspection by other subsystems
-void FGRouteMgr::update_mirror() {
-    mirror->removeChildren("wp");
-    for (int i = 0; i < _route->size(); i++) {
-        SGWayPoint wp = _route->get_waypoint(i);
-        SGPropertyNode *prop = mirror->getChild("wp", i, 1);
+void FGRouteMgr::update_mirror()
+{
+  mirror->removeChildren("wp");
+  for (int i = 0; i < numWaypts(); i++) {
+    Waypt* wp = _route[i];
+    SGPropertyNode *prop = mirror->getChild("wp", i, 1);
 
-        const SGGeod& pos(wp.get_target());
-        prop->setStringValue("id", wp.get_id().c_str());
-        prop->setStringValue("name", wp.get_name().c_str());
-        prop->setDoubleValue("longitude-deg", pos.getLongitudeDeg());
-        prop->setDoubleValue("latitude-deg",pos.getLatitudeDeg());
-        prop->setDoubleValue("altitude-m", pos.getElevationM());
-        prop->setDoubleValue("altitude-ft", pos.getElevationFt());
+    const SGGeod& pos(wp->position());
+    prop->setStringValue("id", wp->ident().c_str());
+    //prop->setStringValue("name", wp.get_name().c_str());
+    prop->setDoubleValue("longitude-deg", pos.getLongitudeDeg());
+    prop->setDoubleValue("latitude-deg",pos.getLatitudeDeg());
+   
+    if (wp->altitudeRestriction() != RESTRICT_NONE) {
+      double ft = wp->altitudeFt();
+      prop->setDoubleValue("altitude-m", ft * SG_FEET_TO_METER);
+      prop->setDoubleValue("altitude-ft", ft);
+    } else {
+      prop->setDoubleValue("altitude-m", -9999.9);
+      prop->setDoubleValue("altitude-ft", -9999.9);
     }
-    // set number as listener attachment point
-    mirror->setIntValue("num", _route->size());
+    
+    if (wp->speedRestriction() != RESTRICT_NONE) {
+      prop->setDoubleValue("speed-kts", wp->speedKts());
+    }
+    
+    if (wp->flag(WPT_ARRIVAL)) {
+      prop->setBoolValue("arrival", true);
+    }
+    
+    if (wp->flag(WPT_DEPARTURE)) {
+      prop->setBoolValue("departure", true);
+    }
+    
+    if (wp->flag(WPT_MISS)) {
+      prop->setBoolValue("missed-approach", true);
+    }
+    
+    prop->setBoolValue("generated", wp->flag(WPT_GENERATED));
+  } // of waypoint iteration
+  
+  // set number as listener attachment point
+  mirror->setIntValue("num", _route.size());
+    
+  NewGUI * gui = (NewGUI *)globals->get_subsystem("gui");
+  FGDialog* rmDlg = gui->getDialog("route-manager");
+  if (rmDlg) {
+    rmDlg->updateValues();
+  }
 }
 
 // command interface /autopilot/route-manager/input:
@@ -462,7 +865,7 @@ void FGRouteMgr::InputListener::valueChanged(SGPropertyNode *prop)
     }
     
     if (!strcmp(s, "@CLEAR"))
-        mgr->init();
+        mgr->clearRoute();
     else if (!strcmp(s, "@ACTIVATE"))
         mgr->activate();
     else if (!strcmp(s, "@LOAD")) {
@@ -472,13 +875,13 @@ void FGRouteMgr::InputListener::valueChanged(SGPropertyNode *prop)
     } else if (!strcmp(s, "@POP")) {
       SG_LOG(SG_AUTOPILOT, SG_WARN, "route-manager @POP command is deprecated");
     } else if (!strcmp(s, "@NEXT")) {
-      mgr->jumpToIndex(mgr->currentWaypoint() + 1);
+      mgr->jumpToIndex(mgr->_currentIndex + 1);
     } else if (!strcmp(s, "@PREVIOUS")) {
-      mgr->jumpToIndex(mgr->currentWaypoint() - 1);
+      mgr->jumpToIndex(mgr->_currentIndex - 1);
     } else if (!strncmp(s, "@JUMP", 5)) {
       mgr->jumpToIndex(atoi(s + 5));
     } else if (!strncmp(s, "@DELETE", 7))
-        mgr->pop_waypoint(atoi(s + 7));
+        mgr->removeWayptAtIndex(atoi(s + 7));
     else if (!strncmp(s, "@INSERT", 7)) {
         char *r;
         int pos = strtol(s + 7, &r, 10);
@@ -487,14 +890,70 @@ void FGRouteMgr::InputListener::valueChanged(SGPropertyNode *prop)
         while (isspace(*r))
             r++;
         if (*r)
-            mgr->new_waypoint(r, pos);
+            mgr->insertWayptAtIndex(mgr->waypointFromString(r), pos);
+    } else if (!strncmp(s, "@ROUTE", 6)) {
+      char* r;
+      int endIndex = strtol(s + 6, &r, 10);
+      RouteType rt = (RouteType) mgr->_routingType->getIntValue();
+      mgr->routeToIndex(endIndex, rt);
+    } else if (!strcmp(s, "@AUTOROUTE")) {
+      mgr->autoRoute();
+    } else if (!strcmp(s, "@POSINIT")) {
+      mgr->initAtPosition();
     } else
-        mgr->new_waypoint(s);
+      mgr->insertWayptAtIndex(mgr->waypointFromString(s), -1);
 }
 
-//    SGWayPoint( const double lon = 0.0, const double lat = 0.0,
-//		const double alt = 0.0, const modetype m = WGS84,
-//		const string& s = "", const string& n = "" );
+void FGRouteMgr::initAtPosition()
+{
+  if (isRouteActive()) {
+    return; // don't mess with the active route
+  }
+  
+  if (haveUserWaypoints()) {
+    // user has already defined, loaded or entered a route, again
+    // don't interfere with it
+    return; 
+  }
+  
+  if (airborne->getBoolValue()) {
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "initAtPosition: airborne, clearing departure info");
+    _departure = NULL;
+    departure->setStringValue("runway", "");
+    return;
+  }
+  
+// on the ground
+  SGGeod pos = SGGeod::fromDegFt(lon->getDoubleValue(), lat->getDoubleValue(), alt->getDoubleValue());
+  _departure = FGAirport::findClosest(pos, 20.0);
+  if (!_departure) {
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "initAtPosition: couldn't find an airport within 20nm");
+    departure->setStringValue("runway", "");
+    return;
+  }
+  
+  FGRunway* r = _departure->findBestRunwayForPos(pos);
+  if (!r) {
+    return;
+  }
+  
+  departure->setStringValue("runway", r->ident().c_str());
+  SG_LOG(SG_AUTOPILOT, SG_INFO, "initAtPosition: starting at " 
+    << _departure->ident() << " on runway " << r->ident());
+}
+
+bool FGRouteMgr::haveUserWaypoints() const
+{
+  for (int i = 0; i < numWaypts(); i++) {
+    if (!_route[i]->flag(WPT_GENERATED)) {
+      // have a non-generated waypoint, we're done
+      return true;
+    }
+  }
+  
+  // all waypoints are generated
+  return false;
+}
 
 bool FGRouteMgr::activate()
 {
@@ -502,41 +961,19 @@ bool FGRouteMgr::activate()
     SG_LOG(SG_AUTOPILOT, SG_WARN, "duplicate route-activation, no-op");
     return false;
   }
-
-  // only add departure waypoint if we're not airborne, so that
-  // in-air route activation doesn't confuse matters.
-  if (weightOnWheels->getBoolValue() && _departure) {
-    string runwayId(departure->getStringValue("runway"));
-    FGRunway* runway = NULL;
-    if (_departure->hasRunwayWithIdent(runwayId)) {
-      runway = _departure->getRunwayByIdent(runwayId);
-    } else {
-      SG_LOG(SG_AUTOPILOT, SG_INFO, 
-        "route-manager, departure runway not found:" << runwayId);
-      runway = _departure->getActiveRunwayForUsage();
-    }
-    
-    SGWayPoint swp(runway->threshold(), 
-      _departure->ident() + "-" + runway->ident(), runway->name());
-    add_waypoint(swp, 0);
-  }
+ 
+  _currentIndex = 0;
+  currentWaypointChanged();
   
-  if (_destination) {
-    string runwayId = (destination->getStringValue("runway"));
-    if (_destination->hasRunwayWithIdent(runwayId)) {
-      FGRunway* runway = _destination->getRunwayByIdent(runwayId);
-      SGWayPoint swp(runway->end(), 
-        _destination->ident() + "-" + runway->ident(), runway->name());
-      add_waypoint(swp);
-    } else {
-      // quite likely, since destination runway may not be known until enroute
-      // probably want a listener on the 'destination' node to allow an enroute
-      // update
-      add_waypoint(SGWayPoint(_destination->geod(), _destination->ident(), _destination->name()));
-    }
+ /* double routeDistanceNm = _route->total_distance() * SG_METER_TO_NM;
+  totalDistance->setDoubleValue(routeDistanceNm);
+  double cruiseSpeedKts = cruise->getDoubleValue("speed", 0.0);
+  if (cruiseSpeedKts > 1.0) {
+    // very very crude approximation, doesn't allow for climb / descent
+    // performance or anything else at all
+    ete->setDoubleValue(routeDistanceNm / cruiseSpeedKts * (60.0 * 60.0));
   }
-
-  _route->set_current(0);
+  */
   active->setBoolValue(true);
   SG_LOG(SG_AUTOPILOT, SG_INFO, "route-manager, activate route ok");
   return true;
@@ -554,15 +991,13 @@ void FGRouteMgr::sequence()
     return;
   }
   
-  _route->increment_current();
+  _currentIndex++;
   currentWaypointChanged();
-  _currentWpt->fireValueChanged();
 }
 
 bool FGRouteMgr::checkFinished()
 {
-  int lastWayptIndex = _route->size() - 1;
-  if (_route->current_index() < lastWayptIndex) {
+  if (_currentIndex < (int) _route.size()) {
     return false;
   }
   
@@ -574,41 +1009,38 @@ bool FGRouteMgr::checkFinished()
 
 void FGRouteMgr::jumpToIndex(int index)
 {
-  if ((index < 0) || (index >= _route->size())) {
+  if ((index < 0) || (index >= (int) _route.size())) {
     SG_LOG(SG_AUTOPILOT, SG_ALERT, "passed invalid index (" << 
       index << ") to FGRouteMgr::jumpToIndex");
     return;
   }
 
-  if (_route->current_index() == index) {
+  if (_currentIndex == index) {
     return; // no-op
   }
   
-  _route->set_current(index);
+// all the checks out the way, go ahead and update state
+  _currentIndex = index;
   currentWaypointChanged();
   _currentWpt->fireValueChanged();
 }
 
 void FGRouteMgr::currentWaypointChanged()
 {
-  SGWayPoint previous = _route->get_previous();
-  SGWayPoint cur = _route->get_current();
+  Waypt* cur = currentWaypt();
+  Waypt* next = nextWaypt();
+
+  wp0->getChild("id")->setStringValue(cur ? cur->ident() : "");
+  wp1->getChild("id")->setStringValue(next ? next->ident() : "");
   
-  wp0->getChild("id")->setStringValue(cur.get_id());
-  if ((_route->current_index() + 1) < _route->size()) {
-    wp1->getChild("id")->setStringValue(_route->get_next().get_id());
-  } else {
-    wp1->getChild("id")->setStringValue("");
-  }
-  
-  SG_LOG(SG_AUTOPILOT, SG_INFO, "route manager, current-wp is now " << _route->current_index());
+  _currentWpt->fireValueChanged();
+  SG_LOG(SG_AUTOPILOT, SG_INFO, "route manager, current-wp is now " << _currentIndex);
 }
 
-int FGRouteMgr::findWaypoint(const SGGeod& aPos) const
+int FGRouteMgr::findWayptIndex(const SGGeod& aPos) const
 {  
-  for (int i=0; i<_route->size(); ++i) {
-    double d = SGGeodesy::distanceM(aPos, _route->get_waypoint(i).get_target());
-    if (d < 200.0) { // 200 metres seems close enough
+  for (int i=0; i<numWaypts(); ++i) {
+    if (_route[i]->matches(aPos)) {
       return i;
     }
   }
@@ -616,29 +1048,36 @@ int FGRouteMgr::findWaypoint(const SGGeod& aPos) const
   return -1;
 }
 
-SGWayPoint FGRouteMgr::get_waypoint( int i ) const
+Waypt* FGRouteMgr::currentWaypt() const
 {
-  return _route->get_waypoint(i);
+  return wayptAtIndex(_currentIndex);
 }
 
-int FGRouteMgr::size() const
+Waypt* FGRouteMgr::previousWaypt() const
 {
-  return _route->size();
+  if (_currentIndex == 0) {
+    return NULL;
+  }
+  
+  return wayptAtIndex(_currentIndex - 1);
 }
 
-int FGRouteMgr::currentWaypoint() const
+Waypt* FGRouteMgr::nextWaypt() const
 {
-  return _route->current_index();
+  if ((_currentIndex + 1) >= numWaypts()) {
+    return NULL;
+  }
+  
+  return wayptAtIndex(_currentIndex + 1);
 }
 
-void FGRouteMgr::setWaypointTargetAltitudeFt(unsigned int index, int altFt)
+Waypt* FGRouteMgr::wayptAtIndex(int index) const
 {
-  SGWayPoint wp = _route->get_waypoint(index);
-  wp.setTargetAltFt(altFt);
-  // simplest way to update a waypoint is to remove and re-add it
-  _route->delete_waypoint(index);
-  _route->add_waypoint(wp, index);
-  waypointsChanged();
+  if ((index < 0) || (index >= numWaypts())) {
+    throw sg_range_exception("waypt index out of range", "FGRouteMgr::wayptAtIndex");
+  }
+  
+  return _route[index];
 }
 
 void FGRouteMgr::saveRoute()
@@ -648,7 +1087,7 @@ void FGRouteMgr::saveRoute()
   try {
     SGPropertyNode_ptr d(new SGPropertyNode);
     SGPath path(_pathNode->getStringValue());
-    d->setIntValue("version", 1);
+    d->setIntValue("version", 2);
     
     if (_departure) {
       d->setStringValue("departure/airport", _departure->ident());
@@ -662,28 +1101,16 @@ void FGRouteMgr::saveRoute()
       d->setStringValue("destination/transition", destination->getStringValue("transition"));
       d->setStringValue("destination/runway", destination->getStringValue("runway"));
     }
-  
-    // route nodes
-    SGPropertyNode* routeNode = d->getChild("route", 0, true);
-    for (int i=0; i<_route->size(); ++i) {
-      SGPropertyNode* wpNode = routeNode->getChild("wp",i, true);
-      SGWayPoint wp(_route->get_waypoint(i));
-      
-      wpNode->setStringValue("ident", wp.get_id());
-      wpNode->setStringValue("name", wp.get_name());
-      SGGeod geod(wp.get_target());
-      
-      wpNode->setDoubleValue("longitude-deg", geod.getLongitudeDeg());
-      wpNode->setDoubleValue("latitude-deg", geod.getLatitudeDeg());
-      
-      if (geod.getElevationFt() > -9990.0) {
-        wpNode->setDoubleValue("altitude-ft", geod.getElevationFt());
-      }
-    } // of waypoint iteration
     
+  // route nodes
+    SGPropertyNode* routeNode = d->getChild("route", 0, true);
+    for (unsigned int i=0; i<_route.size(); ++i) {
+      Waypt* wpt = _route[i];
+      wpt->saveAsNode(routeNode->getChild("wp", i, true));
+    } // of waypoint iteration
     writeProperties(path.str(), d, true /* write-all */);
-  } catch (const sg_exception &e) {
-    SG_LOG(SG_IO, SG_WARN, "Error saving route:" << e.getMessage());
+  } catch (sg_exception& e) {
+    SG_LOG(SG_IO, SG_WARN, "failed to save flight-plan:" << e.getMessage());
   }
 }
 
@@ -706,87 +1133,112 @@ void FGRouteMgr::loadRoute()
   }
   
   try {
-  // departure nodes
-    SGPropertyNode* dep = routeData->getChild("departure");
-    if (!dep) {
-      throw sg_io_exception("malformed route file, no departure node");
+    int version = routeData->getIntValue("version", 1);
+    if (version == 1) {
+      loadVersion1XMLRoute(routeData);
+    } else if (version == 2) {
+      loadVersion2XMLRoute(routeData);
+    } else {
+      throw sg_io_exception("unsupported XML route version");
     }
-    
-    string depIdent = dep->getStringValue("airport");
-    _departure = (FGAirport*) fgFindAirportID(depIdent);
-
-        
-  // destination
-    SGPropertyNode* dst = routeData->getChild("destination");
-    if (!dst) {
-      throw sg_io_exception("malformed route file, no destination node");
-    }
-    
-    _destination = (FGAirport*) fgFindAirportID(dst->getStringValue("airport"));
-    destination->setStringValue("runway", dst->getStringValue("runway"));
-
-  // alternate
-    SGPropertyNode* alt = routeData->getChild("alternate");
-    if (alt) {
-      alternate->setStringValue(alt->getStringValue("airport"));
-    } // of cruise data loading
-    
-  // cruise
-    SGPropertyNode* crs = routeData->getChild("cruise");
-    if (crs) {
-      cruise->setDoubleValue("speed-kts", crs->getDoubleValue("speed-kts"));
-      cruise->setDoubleValue("mach", crs->getDoubleValue("mach"));
-      cruise->setDoubleValue("altitude-ft", crs->getDoubleValue("altitude-ft"));
-    } // of cruise data loading
-
-  // route nodes
-    _route->clear();
-    SGPropertyNode_ptr _route = routeData->getChild("route", 0);
-    SGGeod lastPos = (_departure ? _departure->geod() : SGGeod());
-    
-    for (int i=0; i<_route->nChildren(); ++i) {
-      SGPropertyNode_ptr wp = _route->getChild("wp", i);
-      parseRouteWaypoint(wp);
-    } // of route iteration
   } catch (sg_exception& e) {
     SG_LOG(SG_IO, SG_WARN, "failed to load flight-plan (from '" << e.getOrigin()
       << "'):" << e.getMessage());
   }
 }
 
-void FGRouteMgr::parseRouteWaypoint(SGPropertyNode* aWP)
+void FGRouteMgr::loadXMLRouteHeader(SGPropertyNode_ptr routeData)
 {
-  SGGeod lastPos;
-  if (_route->size() > 0) {
-    lastPos = get_waypoint(_route->size()-1).get_target();
-  } else {
-    // route is empty, use departure airport position
-    const FGAirport* apt = fgFindAirportID(departure->getStringValue("airport"));
-    assert(apt); // shouldn't have got this far with an invalid airport
-    lastPos = apt->geod();
+  // departure nodes
+  SGPropertyNode* dep = routeData->getChild("departure");
+  if (dep) {
+    string depIdent = dep->getStringValue("airport");
+    _departure = (FGAirport*) fgFindAirportID(depIdent);
+    departure->setStringValue("runway", dep->getStringValue("runway"));
+    departure->setStringValue("sid", dep->getStringValue("sid"));
+    departure->setStringValue("transition", dep->getStringValue("transition"));
+  }
+  
+// destination
+  SGPropertyNode* dst = routeData->getChild("destination");
+  if (dst) {
+    _destination = (FGAirport*) fgFindAirportID(dst->getStringValue("airport"));
+    destination->setStringValue("runway", dst->getStringValue("runway"));
+    destination->setStringValue("star", dst->getStringValue("star"));
+    destination->setStringValue("transition", dst->getStringValue("transition"));
   }
 
-  SGPropertyNode_ptr altProp = aWP->getChild("altitude-ft");
-  double altM = -9999.0;
-  if (altProp) {
-    altM = altProp->getDoubleValue() * SG_FEET_TO_METER;
+// alternate
+  SGPropertyNode* alt = routeData->getChild("alternate");
+  if (alt) {
+    alternate->setStringValue(alt->getStringValue("airport"));
+  } // of cruise data loading
+  
+// cruise
+  SGPropertyNode* crs = routeData->getChild("cruise");
+  if (crs) {
+    cruise->setDoubleValue("speed-kts", crs->getDoubleValue("speed-kts"));
+    cruise->setDoubleValue("mach", crs->getDoubleValue("mach"));
+    cruise->setDoubleValue("altitude-ft", crs->getDoubleValue("altitude-ft"));
+  } // of cruise data loading
+
+}
+
+void FGRouteMgr::loadVersion2XMLRoute(SGPropertyNode_ptr routeData)
+{
+  loadXMLRouteHeader(routeData);
+  
+// route nodes
+  WayptVec wpts;
+  SGPropertyNode_ptr routeNode = routeData->getChild("route", 0);    
+  for (int i=0; i<routeNode->nChildren(); ++i) {
+    SGPropertyNode_ptr wpNode = routeNode->getChild("wp", i);
+    WayptRef wpt = Waypt::createFromProperties(NULL, wpNode);
+    wpts.push_back(wpt);
+  } // of route iteration
+  
+  _route = wpts;
+}
+
+void FGRouteMgr::loadVersion1XMLRoute(SGPropertyNode_ptr routeData)
+{
+  loadXMLRouteHeader(routeData);
+
+// route nodes
+  WayptVec wpts;
+  SGPropertyNode_ptr routeNode = routeData->getChild("route", 0);    
+  for (int i=0; i<routeNode->nChildren(); ++i) {
+    SGPropertyNode_ptr wpNode = routeNode->getChild("wp", i);
+    WayptRef wpt = parseVersion1XMLWaypt(wpNode);
+    wpts.push_back(wpt);
+  } // of route iteration
+  
+  _route = wpts;
+}
+
+WayptRef FGRouteMgr::parseVersion1XMLWaypt(SGPropertyNode* aWP)
+{
+  SGGeod lastPos;
+  if (!_route.empty()) {
+    lastPos = _route.back()->position();
+  } else if (_departure) {
+    lastPos = _departure->geod();
   }
-      
+
+  WayptRef w;
   string ident(aWP->getStringValue("ident"));
   if (aWP->hasChild("longitude-deg")) {
     // explicit longitude/latitude
-    SGWayPoint swp(aWP->getDoubleValue("longitude-deg"),
-      aWP->getDoubleValue("latitude-deg"), altM, 
-      SGWayPoint::WGS84, ident, aWP->getStringValue("name"));
-    add_waypoint(swp);
-  } else if (aWP->hasChild("navid")) {
-    // lookup by navid (possibly with offset)
-    string nid(aWP->getStringValue("navid"));
+    w = new BasicWaypt(SGGeod::fromDeg(aWP->getDoubleValue("longitude-deg"), 
+      aWP->getDoubleValue("latitude-deg")), ident, NULL);
+    
+  } else {
+    string nid = aWP->getStringValue("navid", ident.c_str());
     FGPositionedRef p = FGPositioned::findClosestWithIdent(nid, lastPos);
     if (!p) {
       throw sg_io_exception("bad route file, unknown navid:" + nid);
     }
-    
+      
     SGGeod pos(p->geod());
     if (aWP->hasChild("offset-nm") && aWP->hasChild("offset-radial")) {
       double radialDeg = aWP->getDoubleValue("offset-radial");
@@ -796,21 +1248,16 @@ void FGRouteMgr::parseRouteWaypoint(SGPropertyNode* aWP)
       double az2;
       SGGeodesy::direct(p->geod(), radialDeg, offsetNm * SG_NM_TO_METER, pos, az2);
     }
-    
-    SGWayPoint swp(pos.getLongitudeDeg(), pos.getLatitudeDeg(), altM, 
-      SGWayPoint::WGS84, ident, "");
-    add_waypoint(swp);
-  } else {
-    // lookup by ident (symbolic waypoint)
-    FGPositionedRef p = FGPositioned::findClosestWithIdent(ident, lastPos);
-    if (!p) {
-      throw sg_io_exception("bad route file, unknown waypoint:" + ident);
-    }
-    
-    SGWayPoint swp(p->longitude(), p->latitude(), altM, 
-      SGWayPoint::WGS84, p->ident(), p->name());
-    add_waypoint(swp);
+
+    w = new BasicWaypt(pos, ident, NULL);
   }
+  
+  double altFt = aWP->getDoubleValue("altitude-ft", -9999.9);
+  if (altFt > -9990.0) {
+    w->setAltitude(altFt, RESTRICT_AT);
+  }
+
+  return w;
 }
 
 void FGRouteMgr::loadPlainTextRoute(const SGPath& path)
@@ -820,17 +1267,33 @@ void FGRouteMgr::loadPlainTextRoute(const SGPath& path)
     return;
   }
   
-  _route->clear();
-  while (!in.eof()) {
-    string line;
-    getline(in, line, '\n');
-  // trim CR from end of line, if found
-    if (line[line.size() - 1] == '\r') {
-      line.erase(line.size() - 1, 1);
-    }
-    
-    new_waypoint(line, -1);
-  } // of line iteration
+  try {
+    WayptVec wpts;
+    while (!in.eof()) {
+      string line;
+      getline(in, line, '\n');
+    // trim CR from end of line, if found
+      if (line[line.size() - 1] == '\r') {
+        line.erase(line.size() - 1, 1);
+      }
+      
+      line = simgear::strutils::strip(line);
+      if (line.empty() || (line[0] == '#')) {
+        continue; // ignore empty/comment lines
+      }
+      
+      WayptRef w = waypointFromString(line);
+      if (!w) {
+        throw sg_io_exception("failed to create waypoint from line:" + line);
+      }
+      
+      wpts.push_back(w);
+    } // of line iteration
+  
+    _route = wpts;
+  } catch (sg_exception& e) {
+    SG_LOG(SG_IO, SG_WARN, "failed to load route from:" << path.str() << ":" << e.getMessage());
+  }
 }
 
 const char* FGRouteMgr::getDepartureICAO() const
@@ -858,6 +1321,8 @@ void FGRouteMgr::setDepartureICAO(const char* aIdent)
   } else {
     _departure = FGAirport::findByIdent(aIdent);
   }
+  
+  departureChanged();
 }
 
 const char* FGRouteMgr::getDestinationICAO() const
@@ -885,5 +1350,7 @@ void FGRouteMgr::setDestinationICAO(const char* aIdent)
   } else {
     _destination = FGAirport::findByIdent(aIdent);
   }
+  
+  arrivalChanged();
 }
     
diff --git a/src/Autopilot/route_mgr.hxx b/src/Autopilot/route_mgr.hxx
index f3720d09e..16b4adc4b 100644
--- a/src/Autopilot/route_mgr.hxx
+++ b/src/Autopilot/route_mgr.hxx
@@ -28,9 +28,11 @@
 #include <simgear/route/waypoint.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 
+#include <Navaids/route.hxx>
+
 // forward decls
-class SGRoute;
 class SGPath;
+class PropertyWatcher;
 
 class FGAirport;
 typedef SGSharedPtr<FGAirport> FGAirportRef;
@@ -42,9 +44,91 @@ typedef SGSharedPtr<FGAirport> FGAirportRef;
 
 class FGRouteMgr : public SGSubsystem
 {
+public:
+  FGRouteMgr();
+  ~FGRouteMgr();
 
+  void init ();
+  void postinit ();
+  void bind ();
+  void unbind ();
+  void update (double dt);
+
+  void insertWayptAtIndex(flightgear::Waypt* aWpt, int aIndex);
+  flightgear::WayptRef removeWayptAtIndex(int index);
+  
+  void clearRoute();
+  
+  typedef enum {
+    ROUTE_HIGH_AIRWAYS, ///< high-level airways routing
+    ROUTE_LOW_AIRWAYS, ///< low-level airways routing
+    ROUTE_VOR ///< VOR-VOR routing
+  } RouteType;
+  
+  /**
+   * Insert waypoints from index-1 to index. In practice this means you can
+   * 'fill in the gaps' between defined waypoints. If index=0, the departure
+   * airport is used as index-1; if index is -1, the destination airport is
+   * used as the final waypoint.
+   */
+  bool routeToIndex(int index, RouteType aRouteType);
+
+  void autoRoute();
+        
+  bool isRouteActive() const;
+         
+  int currentIndex() const
+    { return _currentIndex; }
+    
+  flightgear::Waypt* currentWaypt() const;
+  flightgear::Waypt* nextWaypt() const;
+  flightgear::Waypt* previousWaypt() const;
+  
+  const flightgear::WayptVec& waypts() const
+    { return _route; }
+  
+  int numWaypts() const
+    { return _route.size(); }
+    
+  flightgear::Waypt* wayptAtIndex(int index) const;
+             
+  /**
+   * Find a waypoint in the route, by position, and return its index, or
+   * -1 if no matching waypoint was found in the route.
+   */
+  int findWayptIndex(const SGGeod& aPos) const;
+        
+  /**
+   * Activate a built route. This checks for various mandatory pieces of
+   * data, such as departure and destination airports, and creates waypoints
+   * for them on the route structure.
+   *
+   * returns true if the route was activated successfully, or false if the
+   * route could not be activated for some reason
+   */
+  bool activate();
+
+  /**
+   * Step to the next waypoint on the active route
+   */
+  void sequence();
+  
+  /**
+   * Set the current waypoint to the specified index.
+   */
+  void jumpToIndex(int index);
+  
+  void saveRoute();
+  void loadRoute();
+  
+  /**
+   * Helper command to setup current airport/runway if necessary
+   */
+  void initAtPosition();
 private:
-    SGRoute* _route;
+  flightgear::WayptVec _route;
+  int _currentIndex;
+  
     time_t _takeoffTime;
     time_t _touchdownTime;
     FGAirportRef _departure;
@@ -77,6 +161,8 @@ private:
     SGPropertyNode_ptr _pathNode;
     SGPropertyNode_ptr _currentWpt;
     
+    /// integer property corresponding to the RouteType enum
+    SGPropertyNode_ptr _routingType;
     
     /** 
      * Signal property to notify people that the route was edited
@@ -111,10 +197,17 @@ private:
      *  - airport-id/runway-id
      *  - navaid/radial-deg/offset-nm
      */
-    SGWayPoint* make_waypoint(const string& target);
+    flightgear::WayptRef waypointFromString(const std::string& target);
+    
+    
+    void departureChanged();
+    void buildDeparture(flightgear::WayptRef enroute, flightgear::WayptVec& wps);
+    
+    void arrivalChanged();
+    void buildArrival(flightgear::WayptRef enroute, flightgear::WayptVec& wps);
     
     /**
-     * Helper to keep various pieces of state in sync when the SGRoute is
+     * Helper to keep various pieces of state in sync when the route is
      * modified (waypoints added, inserted, removed). Notably, this fires the
      * 'edited' signal.
      */
@@ -138,6 +231,17 @@ private:
     
     void loadPlainTextRoute(const SGPath& path);
     
+    void loadVersion1XMLRoute(SGPropertyNode_ptr routeData);
+    void loadVersion2XMLRoute(SGPropertyNode_ptr routeData);
+    void loadXMLRouteHeader(SGPropertyNode_ptr routeData);
+    flightgear::WayptRef parseVersion1XMLWaypt(SGPropertyNode* aWP);
+    
+    /**
+     * Predicate for helping the UI - test if at least one waypoint was
+     * entered by the user (as opposed to being generated by the route-manager)
+     */
+    bool haveUserWaypoints() const;
+    
 // tied getters and setters
     const char* getDepartureICAO() const;
     const char* getDepartureName() const;
@@ -146,64 +250,9 @@ private:
     const char* getDestinationICAO() const;
     const char* getDestinationName() const;
     void setDestinationICAO(const char* aIdent);
-    
-public:
 
-    FGRouteMgr();
-    ~FGRouteMgr();
-
-    void init ();
-    void postinit ();
-    void bind ();
-    void unbind ();
-    void update (double dt);
-
-    bool build ();
-
-    void new_waypoint( const string& tgt_alt, int n = -1 );
-    void add_waypoint( const SGWayPoint& wp, int n = -1 );
-    SGWayPoint pop_waypoint( int i = 0 );
-
-    SGWayPoint get_waypoint( int i ) const;
-    int size() const;
-        
-    bool isRouteActive() const;
-        
-    int currentWaypoint() const;
-       
-    /**
-     * Find a waypoint in the route, by position, and return its index, or
-     * -1 if no matching waypoint was found in the route.
-     */
-    int findWaypoint(const SGGeod& aPos) const;
-          
-    /**
-     * Activate a built route. This checks for various mandatory pieces of
-     * data, such as departure and destination airports, and creates waypoints
-     * for them on the route structure.
-     *
-     * returns true if the route was activated successfully, or false if the
-     * route could not be activated for some reason
-     */
-    bool activate();
-
-    /**
-     * Step to the next waypoint on the active route
-     */
-    void sequence();
-    
-    /**
-     *
-     */
-    void jumpToIndex(int index);
-    
-    /**
-     * 
-     */
-    void setWaypointTargetAltitudeFt(unsigned int index, int altFt);
-    
-    void saveRoute();
-    void loadRoute();
+    PropertyWatcher* _departureWatcher;
+    PropertyWatcher* _arrivalWatcher;
 };
 
 
diff --git a/src/GUI/MapWidget.cxx b/src/GUI/MapWidget.cxx
index 44b1f7601..bdd73a11e 100644
--- a/src/GUI/MapWidget.cxx
+++ b/src/GUI/MapWidget.cxx
@@ -25,6 +25,7 @@
 #include <Airports/simple.hxx>
 #include <Airports/runways.hxx>
 #include <Main/fg_os.hxx>      // fgGetKeyModifiers()
+#include <Navaids/routePath.hxx>
 
 const char* RULER_LEGEND_KEY = "ruler-legend";
   
@@ -657,77 +658,73 @@ void MapWidget::paintAircraftLocation(const SGGeod& aircraftPos)
 
 void MapWidget::paintRoute()
 {
-  if (_route->size() < 2) {
+  if (_route->numWaypts() < 2) {
     return;
   }
   
-// first pass, draw the actual line
+  RoutePath path(_route->waypts());
+  
+// first pass, draw the actual lines
   glLineWidth(2.0);
-  glBegin(GL_LINE_STRIP);
   
-  SGVec2d prev = project(_route->get_waypoint(0).get_target());
-  glVertex2d(prev.x(), prev.y());
-  
-  for (int w=1; w < _route->size(); ++w) {
+  for (int w=0; w<_route->numWaypts(); ++w) {
+    SGGeodVec gv(path.pathForIndex(w));
+    if (gv.empty()) {
+      continue;
+    }
     
-    SGVec2d p = project(_route->get_waypoint(w).get_target());
-    
-    if (w < _route->currentWaypoint()) {
+    if (w < _route->currentIndex()) {
       glColor4f(0.5, 0.5, 0.5, 0.7);
     } else {
       glColor4f(1.0, 0.0, 1.0, 1.0);
     }
     
-    glVertex2d(p.x(), p.y());
+    flightgear::WayptRef wpt(_route->wayptAtIndex(w));
+    if (wpt->flag(flightgear::WPT_MISS)) {
+      glEnable(GL_LINE_STIPPLE);
+      glLineStipple(1, 0x00FF);
+    }
     
+    glBegin(GL_LINE_STRIP);
+    for (unsigned int i=0; i<gv.size(); ++i) {
+      SGVec2d p = project(gv[i]);
+      glVertex2d(p.x(), p.y());
+    }
+    
+    glEnd();
+    glDisable(GL_LINE_STIPPLE);
   }
-  glEnd();
   
   glLineWidth(1.0);
 // second pass, draw waypoint symbols and data
-  for (int w=0; w < _route->size(); ++w) {
-    const SGWayPoint& wpt(_route->get_waypoint(w));
-    SGVec2d p = project(wpt.get_target());
+  for (int w=0; w < _route->numWaypts(); ++w) {
+    flightgear::WayptRef wpt(_route->wayptAtIndex(w));
+    SGGeod g = path.positionForIndex(w);
+    if (g == SGGeod()) {
+      continue; // Vectors or similar
+    }
+    
+    SGVec2d p = project(g);
     glColor4f(1.0, 0.0, 1.0, 1.0);
     circleAtAlt(p, 8, 12, 5);
     
     std::ostringstream legend;
-    legend << wpt.get_id();
-    if (wpt.get_target_alt() > -9990.0) {
-      legend << '\n' << SGMiscd::roundToInt(wpt.get_target_alt()) << '\'';
+    legend << wpt->ident();
+    if (wpt->altitudeRestriction() != flightgear::RESTRICT_NONE) {
+      legend << '\n' << SGMiscd::roundToInt(wpt->altitudeFt()) << '\'';
     }
     
-    if (wpt.get_speed() > 0.0) {
-      legend << '\n' << SGMiscd::roundToInt(wpt.get_speed()) << "Kts";
+    if (wpt->speedRestriction() != flightgear::RESTRICT_NONE) {
+      legend << '\n' << SGMiscd::roundToInt(wpt->speedKts()) << "Kts";
     }
 	
     MapData* d = getOrCreateDataForKey(reinterpret_cast<void*>(w * 2));
     d->setText(legend.str());
-    d->setLabel(wpt.get_id());
+    d->setLabel(wpt->ident());
     d->setAnchor(p);
     d->setOffset(MapData::VALIGN_TOP | MapData::HALIGN_CENTER, 15);
-    d->setPriority(w < _route->currentWaypoint() ? 9000 : 12000);
+    d->setPriority(w < _route->currentIndex() ? 9000 : 12000);
         
-    if (w > 0) {
-      SGVec2d legMid = (prev + p) * 0.5;
-      std::ostringstream legLegend;
-      
-      double track = wpt.get_track();
-      if (_magneticHeadings) {
-        track -= _magVar->get_magvar(); // show magnetic track for leg
-      }
-      
-      legLegend << SGMiscd::roundToInt(track) << " " 
-        << SGMiscd::roundToInt(wpt.get_distance() * SG_METER_TO_NM) << "Nm";
-        
-      MapData* ld = getOrCreateDataForKey(reinterpret_cast<void*>(w * 2 + 1));
-      ld->setText(legLegend.str());
-      ld->setAnchor(legMid);
-      ld->setOffset(MapData::VALIGN_TOP | MapData::HALIGN_CENTER, 15);
-      ld->setPriority(w < _route->currentWaypoint() ? 8000 : 11000);
-    } // of draw leg data
-    
-    prev = p;
   } // of second waypoint iteration
 }
 
diff --git a/src/GUI/WaypointList.cxx b/src/GUI/WaypointList.cxx
index 5498076e5..1c1014e03 100644
--- a/src/GUI/WaypointList.cxx
+++ b/src/GUI/WaypointList.cxx
@@ -7,6 +7,8 @@
 #include "WaypointList.hxx"
 
 #include <algorithm>
+#include <boost/tuple/tuple.hpp>
+
 #include <plib/puAux.h>
 
 #include <simgear/route/waypoint.hxx>
@@ -16,14 +18,18 @@
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
 
+#include <Navaids/positioned.hxx>
 #include <Autopilot/route_mgr.hxx>
 
+using namespace flightgear;
+
 enum {
   SCROLL_NO = 0,
   SCROLL_UP,
   SCROLL_DOWN
 };
   
+static const double BLINK_TIME = 0.3;
 static const int DRAG_START_DISTANCE_PX = 5;
   
 class RouteManagerWaypointModel : 
@@ -48,37 +54,38 @@ public:
 // implement WaypointList::Model
   virtual unsigned int numWaypoints() const
   {
-    return _rm->size();
+    return _rm->numWaypts();
   }
   
   virtual int currentWaypoint() const
   {
-    return _rm->currentWaypoint();
+    return _rm->currentIndex();
   }
   
-  virtual SGWayPoint waypointAt(unsigned int index) const
+  virtual flightgear::Waypt* waypointAt(unsigned int index) const
   {
-    return _rm->get_waypoint(index);
+    if (index >= numWaypoints()) {
+      return NULL;
+    }
+    
+    return _rm->wayptAtIndex(index);
   }
 
   virtual void deleteAt(unsigned int index)
   {
-    _rm->pop_waypoint(index);
-  }
-  
-  virtual void setWaypointTargetAltitudeFt(unsigned int index, int altFt)
-  {
-    _rm->setWaypointTargetAltitudeFt(index, altFt);
+    _rm->removeWayptAtIndex(index);
   }
   
   virtual void moveWaypointToIndex(unsigned int srcIndex, unsigned int destIndex)
   {
+    SG_LOG(SG_GENERAL, SG_INFO, "moveWaypoint: from " << srcIndex << " to " << destIndex);
     if (destIndex > srcIndex) {
       --destIndex;
     }
     
-    SGWayPoint wp = _rm->pop_waypoint(srcIndex);
-    _rm->add_waypoint(wp, destIndex);
+    WayptRef w(_rm->removeWayptAtIndex(srcIndex));
+    SG_LOG(SG_GENERAL, SG_INFO, "wpt:" << w->ident());
+    _rm->insertWayptAtIndex(w, destIndex);
   }
   
   virtual void setUpdateCallback(SGCallback* cb)
@@ -129,13 +136,16 @@ WaypointList::WaypointList(int x, int y, int width, int height) :
   _showLatLon(false),
   _model(NULL),
   _updateCallback(NULL),
-  _scrollCallback(NULL)
+  _scrollCallback(NULL),
+  _blink(false)
 {
   // pretend to be a list, so fgPopup doesn't mess with our mouse events
   type |= PUCLASS_LIST;  
   setModel(new RouteManagerWaypointModel());
   setSize(width, height);
   setValue(-1);
+  
+  _blinkTimer.stamp();
 }
 
 WaypointList::~WaypointList()
@@ -230,6 +240,11 @@ void WaypointList::handleDrag(int x, int y)
     }
     
     _dragSourceRow = rowForY(y - abox.min[1]);
+    Waypt* wp = _model->waypointAt(_dragSourceRow);
+    if (!wp || wp->flag(WPT_GENERATED)) {
+      return; // don't allow generated points to be dragged
+    }
+    
     _dragging = true;
     _dragScroll = SCROLL_NO;
   }
@@ -255,20 +270,26 @@ void WaypointList::doDrop(int x, int y)
   _dragging = false;
   puDeactivateWidget();
   
+  SG_LOG(SG_GENERAL, SG_INFO, "doDrop");
+  
   if ((y < abox.min[1]) || (y >= abox.max[1])) {
+    SG_LOG(SG_GENERAL, SG_INFO, "y out of bounds:" << y);
     return;
   }
   
-  if (_dragSourceRow != _dragTargetRow) {
-    _model->moveWaypointToIndex(_dragSourceRow, _dragTargetRow);
-    
-    // keep row indexes linged up when moving an item down the list
-    if (_dragSourceRow < _dragTargetRow) {
-      --_dragTargetRow;
-    }
-    
-    setSelected(_dragTargetRow);
+  if (_dragSourceRow == _dragTargetRow) {
+    SG_LOG(SG_GENERAL, SG_INFO, "source and target row match");
+    return;
   }
+  
+  _model->moveWaypointToIndex(_dragSourceRow, _dragTargetRow);
+  
+  // keep row indexes linged up when moving an item down the list
+  if (_dragSourceRow < _dragTargetRow) {
+    --_dragTargetRow;
+  }
+  
+  setSelected(_dragTargetRow);
 }
 
 void WaypointList::invokeDownCallback(void)
@@ -302,6 +323,12 @@ void WaypointList::draw( int dx, int dy )
     doDragScroll();
   }
   
+  double dt = (SGTimeStamp::now() - _blinkTimer).toSecs();
+  if (dt > BLINK_TIME) {
+    _blinkTimer.stamp();
+    _blink = !_blink;
+  }
+  
   glEnable(GL_SCISSOR_TEST);
   GLint sx = (int) abox.min[0],
     sy = abox.min[1];
@@ -321,6 +348,7 @@ void WaypointList::draw( int dx, int dy )
   
   y -= (_scrollPx % rowHeight); // partially draw the first row
   
+  _arrowWidth = legendFont.getStringWidth(">");
   for ( ; row <= final; ++row, y += rowHeight) {
     drawRow(dx, dy, row, y);
   } // of row drawing iteration
@@ -343,6 +371,8 @@ void WaypointList::draw( int dx, int dy )
 
 void WaypointList::drawRow(int dx, int dy, int rowIndex, int y)
 {
+  flightgear::Waypt* wp(_model->waypointAt(rowIndex));
+    
   bool isSelected = (rowIndex == getSelected());
   bool isCurrent = (rowIndex == _model->currentWaypoint());
   bool isDragSource = (_dragging && (rowIndex == _dragSourceRow));
@@ -351,62 +381,100 @@ void WaypointList::drawRow(int dx, int dy, int rowIndex, int y)
   bkgBox.min[1] = abox.max[1] - y;
   bkgBox.max[1] = bkgBox.min[1] + rowHeightPx();
   
-  puColour currentColor;
-  puSetColor(currentColor, 1.0, 1.0, 0.0, 0.5);
+  puColour col;
+  puFont* f = &legendFont;
+  bool drawBox = false;
+  
+  if (wp->flag(WPT_MISS)) {
+    drawBox = true;
+    puSetColor(col, 1.0, 0.0, 0.0, 0.3);  // red
+  } else if (wp->flag(WPT_ARRIVAL)) {
+    drawBox = true;
+    puSetColor(col, 0.0, 0.0, 0.0, 0.3);
+  } else if (wp->flag(WPT_DEPARTURE)) {
+    drawBox = true;
+    puSetColor(col, 0.0, 0.0, 0.0, 0.3);
+  }
   
   if (isDragSource) {
     // draw later, on *top* of text string
-  } else  if (isCurrent) {
-    bkgBox.draw(dx, dy, PUSTYLE_PLAIN, &currentColor, false, 0);
   } else if (isSelected) { // -PLAIN means selected, apparently
     bkgBox.draw(dx, dy, -PUSTYLE_PLAIN, colour, false, 0);
+  } else if (drawBox) {
+    bkgBox.draw(dx, dy, PUSTYLE_PLAIN, &col, false, 0);
+  }
+  
+  if (isCurrent) {
+    glColor4f (1.0, 0.5, 0.0, 1.0) ;
+  } else {
+    glColor4fv ( colour [ PUCOL_LEGEND ] ) ;
   }
   
   int xx = dx + abox.min[0] + PUSTR_LGAP;
   int yy = dy + abox.max[1] - y ;
   yy += 4; // center text in row height
   
-  // row textual data
-  const SGWayPoint wp(_model->waypointAt(rowIndex));
-  char buffer[128];
-  int count = ::snprintf(buffer, 128, "%03d   %-5s", rowIndex, wp.get_id().c_str());
-  
-  if (wp.get_name().size() > 0 && (wp.get_name() != wp.get_id())) { 
-    // append name if present, and different to id
-    ::snprintf(buffer + count, 128 - count, " (%s)", wp.get_name().c_str());
+  if (isCurrent) {
+    f->drawString(">", xx, yy);
   }
   
-  glColor4fv ( colour [ PUCOL_LEGEND ] ) ;
-  drawClippedString(legendFont, buffer, xx, yy, 300);
+  int x = xx;
+  x += _arrowWidth + PUSTR_LGAP;
   
-  if (_showLatLon) {
-    char ns = (wp.get_target_lat() > 0.0) ? 'N' : 'S';
-    char ew = (wp.get_target_lon() > 0.0) ? 'E' : 'W';
-    
-    ::snprintf(buffer, 128 - count, "%4.2f%c %4.2f%c",
-      fabs(wp.get_target_lon()), ew, fabs(wp.get_target_lat()), ns);
-  } else {
-    ::snprintf(buffer, 128 - count, "%03.0f %5.1fnm",
-      wp.get_track(), wp.get_distance() * SG_METER_TO_NM);
+  // row textual data
+
+  char buffer[128];
+  int count = ::snprintf(buffer, 128, "%03d   %-5s", rowIndex, wp->ident().c_str());
+ 
+  FGPositioned* src = wp->source(); 
+  if (src && !src->name().empty() && (src->name() != wp->ident())) { 
+    // append name if present, and different to id
+    ::snprintf(buffer + count, 128 - count, " (%s)", src->name().c_str());
   }
 
-  legendFont.drawString(buffer, xx + 300 + PUSTR_LGAP, yy);
+  drawClippedString(legendFont, buffer, x, yy, 300);
+  x += 300 + PUSTR_LGAP;
   
-  int altFt = (int) wp.get_target_alt() * SG_METER_TO_FEET;
-  if (altFt > -9990) {
-    int altHundredFt = (altFt + 50) / 100; // round to nearest 100ft
+  if (_showLatLon) {
+    SGGeod p(wp->position());
+    char ns = (p.getLatitudeDeg() > 0.0) ? 'N' : 'S';
+    char ew = (p.getLongitudeDeg() > 0.0) ? 'E' : 'W';
+    
+    ::snprintf(buffer, 128 - count, "%4.2f%c %4.2f%c",
+      fabs(p.getLongitudeDeg()), ew, fabs(p.getLatitudeDeg()), ns);
+  } else if (rowIndex > 0) {
+    double courseDeg;
+    double distanceM;
+    Waypt* prev = _model->waypointAt(rowIndex - 1);
+    boost::tie(courseDeg, distanceM) = wp->courseAndDistanceFrom(prev->position());
+  
+    ::snprintf(buffer, 128 - count, "%03.0f %5.1fnm",
+      courseDeg, distanceM * SG_METER_TO_NM);
+  }
+
+  f->drawString(buffer, x, yy);
+  x += 100 + PUSTR_LGAP;
+  
+  if (wp->altitudeRestriction() != RESTRICT_NONE) {
+    int altHundredFt = (wp->altitudeFt() + 50) / 100; // round to nearest 100ft
     if (altHundredFt < 100) {
       count = ::snprintf(buffer, 128, "%d'", altHundredFt * 100);
     } else { // display as a flight-level
       count = ::snprintf(buffer, 128, "FL%d", altHundredFt);
     }
     
-    legendFont.drawString(buffer, xx + 400 + PUSTR_LGAP, yy);
+    f->drawString(buffer, x, yy);
   } // of valid wp altitude
+  x += 60 + PUSTR_LGAP;
+  
+  if (wp->speedRestriction() != RESTRICT_NONE) {
+    count = ::snprintf(buffer, 126, "%dKts", (int) wp->speedKts());
+    f->drawString(buffer, x, yy);
+  }
   
   if (isDragSource) {
-    puSetColor(currentColor, 1.0, 0.5, 0.0, 0.5);
-    bkgBox.draw(dx, dy, PUSTYLE_PLAIN, &currentColor, false, 0);
+    puSetColor(col, 1.0, 0.5, 0.0, 0.5);
+    bkgBox.draw(dx, dy, PUSTYLE_PLAIN, &col, false, 0);
   }
 }
 
@@ -613,22 +681,34 @@ int WaypointList::checkKey (int key, int updown )
   
   case '-':
     if (getSelected() >= 0) {
-      int newAlt = wayptAltFtHundreds(getSelected()) - 10;
-      if (newAlt < 0) {
-        _model->setWaypointTargetAltitudeFt(getSelected(), -9999);
-      } else {
-        _model->setWaypointTargetAltitudeFt(getSelected(), newAlt * 100);
+      Waypt* wp = _model->waypointAt(getSelected());
+      if (wp->flag(WPT_GENERATED)) {
+        break;
+      }
+      
+      if (wp->altitudeRestriction() != RESTRICT_NONE) {
+        int curAlt = (static_cast<int>(wp->altitudeFt()) + 50) / 100;
+        if (curAlt <= 0) {
+          wp->setAltitude(0, RESTRICT_NONE);
+        } else {
+          wp->setAltitude((curAlt - 10) * 100, wp->altitudeRestriction());
+        }
       }
     }
     break;
     
   case '=':
     if (getSelected() >= 0) {
-      int newAlt = wayptAltFtHundreds(getSelected()) + 10;
-      if (newAlt < 0) {
-        _model->setWaypointTargetAltitudeFt(getSelected(), 0);
+      flightgear::Waypt* wp = _model->waypointAt(getSelected());
+      if (wp->flag(WPT_GENERATED)) {
+        break;
+      }
+        
+      if (wp->altitudeRestriction() == RESTRICT_NONE) {
+        wp->setAltitude(1000, RESTRICT_AT);
       } else {
-        _model->setWaypointTargetAltitudeFt(getSelected(), newAlt * 100);
+        int curAlt = (static_cast<int>(wp->altitudeFt()) + 50) / 100;
+        wp->setAltitude((curAlt + 10) * 100, wp->altitudeRestriction());
       }
     }
     break;
@@ -636,6 +716,11 @@ int WaypointList::checkKey (int key, int updown )
   case 0x7f: // delete
     if (getSelected() >= 0) {
       int index = getSelected();
+      Waypt* wp = _model->waypointAt(getSelected());
+      if (wp->flag(WPT_GENERATED)) {
+        break;
+      }
+      
       _model->deleteAt(index);
       setSelected(index - 1);
     }
@@ -648,17 +733,6 @@ int WaypointList::checkKey (int key, int updown )
   return TRUE ;
 }
 
-int WaypointList::wayptAltFtHundreds(int index) const
-{
-  double alt = _model->waypointAt(index).get_target_alt();
-  if (alt < -9990.0) {
-    return -9999;
-  }
-  
-  int altFt = (int) alt * SG_METER_TO_FEET;
-  return (altFt + 50) / 100; // round to nearest 100ft
-}
-
 void WaypointList::modelUpdateCallback()
 {
   // local stuff
diff --git a/src/GUI/WaypointList.hxx b/src/GUI/WaypointList.hxx
index 165a1dad3..46a386b59 100644
--- a/src/GUI/WaypointList.hxx
+++ b/src/GUI/WaypointList.hxx
@@ -14,9 +14,12 @@
 
 // forward decls
 class puaScrollBar;
-class SGWayPoint;
 class SGCallback;
 
+namespace flightgear {
+  class Waypt;
+}
+
 class WaypointList : public puFrame, public GUI_ID
 {
 public:
@@ -71,14 +74,13 @@ public:
     
     virtual unsigned int numWaypoints() const = 0;
     virtual int currentWaypoint() const = 0;
-    virtual SGWayPoint waypointAt(unsigned int index) const = 0;
+    virtual flightgear::Waypt* waypointAt(unsigned int index) const = 0;
   
   // update notifications
     virtual void setUpdateCallback(SGCallback* cb) = 0;
   
   // editing operations
     virtual void deleteAt(unsigned int index) = 0;
-    virtual void setWaypointTargetAltitudeFt(unsigned int index, int altFt) = 0;
     virtual void moveWaypointToIndex(unsigned int srcIndex, unsigned int dstIndex) = 0;
   };
   
@@ -121,9 +123,7 @@ private:
   int numFullyVisibleRows() const;
   int firstFullyVisibleRow() const;
   int lastFullyVisibleRow() const;
-  
-  int wayptAltFtHundreds(int index) const;
-  
+    
   void modelUpdateCallback();
   
   int _scrollPx; // scroll ammount (in pixels)
@@ -141,6 +141,10 @@ private:
   Model* _model;
   SGCallback* _updateCallback;
   SGCallback* _scrollCallback;
+ 
+  SGTimeStamp _blinkTimer;
+  bool _blink;
+  int _arrowWidth;
 };
 
 class ScrolledWaypointList : public puGroup
diff --git a/src/GUI/dialog.cxx b/src/GUI/dialog.cxx
index fbf758b29..71852fbc7 100644
--- a/src/GUI/dialog.cxx
+++ b/src/GUI/dialog.cxx
@@ -1339,8 +1339,41 @@ fgList::update()
 
 void fgComboBox::update()
 {
+  if (_inHit) {
+    return;
+  }
+  
+  std::string curValue(getStringValue());
   fgValueList::update();
   newList(_list);
+  int currentItem = puaComboBox::getCurrentItem();
+
+  
+// look for the previous value, in the new list
+  for (int i = 0; _list[i] != 0; i++) {
+    if (_list[i] == curValue) {
+    // don't set the current item again; this is important to avoid
+    // recursion here if the combo callback ultimately causes another dialog-update
+      if (i != currentItem) {
+        puaComboBox::setCurrentItem(i);
+      }
+      
+      return;
+    }
+  } // of list values iteration
+  
+// cound't find current item, default to first
+  if (currentItem != 0) {
+    puaComboBox::setCurrentItem(0);
+  }
+}
+
+int fgComboBox::checkHit(int b, int up, int x, int y)
+{
+  _inHit = true;
+  int r = puaComboBox::checkHit(b, up, x, y);
+  _inHit = false;
+  return r;
 }
 
 // end of dialog.cxx
diff --git a/src/GUI/dialog.hxx b/src/GUI/dialog.hxx
index 090ef2bbc..10739280d 100644
--- a/src/GUI/dialog.hxx
+++ b/src/GUI/dialog.hxx
@@ -259,9 +259,17 @@ public:
 class fgComboBox : public fgValueList, public puaComboBox {
 public:
     fgComboBox(int x1, int y1, int x2, int y2, SGPropertyNode *p, bool editable) :
-        fgValueList(p), puaComboBox(x1, y1, x2, y2, _list, editable) {}
+        fgValueList(p), 
+        puaComboBox(x1, y1, x2, y2, _list, editable),
+        _inHit(false)
+      {}
         
     void update();
+    
+    virtual int checkHit(int b, int up, int x, int y);
+
+private:
+    bool _inHit;
 };
 
 class fgSelectBox : public fgValueList, public puaSelectBox {
diff --git a/src/Instrumentation/Makefile.am b/src/Instrumentation/Makefile.am
index fa7f85ea3..136929dc7 100644
--- a/src/Instrumentation/Makefile.am
+++ b/src/Instrumentation/Makefile.am
@@ -32,6 +32,7 @@ libInstrumentation_a_SOURCES = \
 	dclgps.cxx dclgps.hxx \
 	render_area_2d.cxx render_area_2d.hxx        \
 		groundradar.cxx groundradar.hxx \
-		agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx
+		agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx \
+	rnav_waypt_controller.cxx rnav_waypt_controller.hxx \
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(top_builddir)/src
diff --git a/src/Instrumentation/gps.cxx b/src/Instrumentation/gps.cxx
index 71e3becbd..1add1b97f 100644
--- a/src/Instrumentation/gps.cxx
+++ b/src/Instrumentation/gps.cxx
@@ -9,6 +9,8 @@
 
 #include "gps.hxx"
 
+#include <boost/tuple/tuple.hpp>
+
 #include <memory>
 #include <set>
 #include <cstring>
@@ -17,6 +19,7 @@
 #include "Main/globals.hxx" // for get_subsystem
 #include "Main/util.hxx" // for fgLowPass
 #include "Navaids/positioned.hxx"
+#include <Navaids/waypoint.hxx>
 #include "Navaids/navrecord.hxx"
 #include "Airports/simple.hxx"
 #include "Airports/runways.hxx"
@@ -29,6 +32,7 @@
 
 using std::auto_ptr;
 using std::string;
+using namespace flightgear;
 
 ///////////////////////////////////////////////////////////////////
 
@@ -227,6 +231,9 @@ GPS::GPS ( SGPropertyNode *node) :
   string branch = "/instrumentation/" + _name;
   _gpsNode = fgGetNode(branch.c_str(), _num, true );
   _scratchNode = _gpsNode->getChild("scratch", 0, true);
+  
+  SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true);
+  _currentWayptNode = wp_node->getChild("wp", 1, true);
 }
 
 GPS::~GPS ()
@@ -255,17 +262,9 @@ GPS::init ()
   _northSouthVelocity = _gpsNode->getChild("ns-velocity-msec", 0, true);
   
 // waypoints
-  SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true);
-  SGPropertyNode *wp1_node = wp_node->getChild("wp", 1, true);
-
   // for compatability, alias selected course down to wp/wp[1]/desired-course-deg
-  SGPropertyNode* wp1Crs = wp1_node->getChild("desired-course-deg", 0, true);
+  SGPropertyNode* wp1Crs = _currentWayptNode->getChild("desired-course-deg", 0, true);
   wp1Crs->alias(_gpsNode->getChild("desired-course-deg", 0, true));
-    
-//    _true_wp1_bearing_error_node =
-//        wp1_node->getChild("true-bearing-error-deg", 0, true);
-//    _magnetic_wp1_bearing_error_node =
-  //      wp1_node->getChild("magnetic-bearing-error-deg", 0, true);
 
   _tracking_bug_node = _gpsNode->getChild("tracking-bug", 0, true);
          
@@ -299,10 +298,10 @@ GPS::init ()
   
 // navradio slaving properties  
   SGPropertyNode* toFlag = _gpsNode->getChild("to-flag", 0, true);
-  toFlag->alias(wp1_node->getChild("to-flag"));
+  toFlag->alias(_currentWayptNode->getChild("to-flag"));
   
   SGPropertyNode* fromFlag = _gpsNode->getChild("from-flag", 0, true);
-  fromFlag->alias(wp1_node->getChild("from-flag"));
+  fromFlag->alias(_currentWayptNode->getChild("from-flag"));
     
 // autopilot drive properties
   _apDrivingFlag = fgGetNode("/autopilot/settings/gps-driving-true-heading", true);
@@ -357,49 +356,39 @@ GPS::bind()
   tie(_scratchNode, "mag-bearing-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getScratchMagBearing, NULL));
   tie(_scratchNode, "has-next", SGRawValueMethods<GPS, bool>(*this, &GPS::getScratchHasNext, NULL));
   _scratchValid = false;
-  
-// waypoint data (including various historical things)
-  SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true);
-  SGPropertyNode *wp0_node = wp_node->getChild("wp", 0, true);
-  SGPropertyNode *wp1_node = wp_node->getChild("wp", 1, true);
 
-  tieSGGeodReadOnly(wp0_node, _wp0_position, "longitude-deg", "latitude-deg", "altitude-ft");
-  tie(wp0_node, "ID", SGRawValueMethods<GPS, const char*>
-    (*this, &GPS::getWP0Ident, NULL));
-  tie(wp0_node, "name", SGRawValueMethods<GPS, const char*>
-    (*this, &GPS::getWP0Name, NULL));
-    
-  tieSGGeodReadOnly(wp1_node, _wp1_position, "longitude-deg", "latitude-deg", "altitude-ft");
-  tie(wp1_node, "ID", SGRawValueMethods<GPS, const char*>
-    (*this, &GPS::getWP1Ident, NULL));
-  tie(wp1_node, "name", SGRawValueMethods<GPS, const char*>
-    (*this, &GPS::getWP1Name, NULL));
   
-  tie(wp1_node, "distance-nm", SGRawValueMethods<GPS, double>
+  SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true);
+  SGPropertyNode* wp0_node = wp_node->getChild("wp", 0, true);
+  
+  tieSGGeodReadOnly(wp0_node, _wp0_position, "longitude-deg", "latitude-deg", "altitude-ft");
+  tie(_currentWayptNode, "ID", SGRawValueMethods<GPS, const char*>
+    (*this, &GPS::getWP1Ident, NULL));
+  
+  tie(_currentWayptNode, "distance-nm", SGRawValueMethods<GPS, double>
     (*this, &GPS::getWP1Distance, NULL));
-  tie(wp1_node, "bearing-true-deg", SGRawValueMethods<GPS, double>
+  tie(_currentWayptNode, "bearing-true-deg", SGRawValueMethods<GPS, double>
     (*this, &GPS::getWP1Bearing, NULL));
-  tie(wp1_node, "bearing-mag-deg", SGRawValueMethods<GPS, double>
+  tie(_currentWayptNode, "bearing-mag-deg", SGRawValueMethods<GPS, double>
     (*this, &GPS::getWP1MagBearing, NULL));
-  tie(wp1_node, "TTW-sec", SGRawValueMethods<GPS, double>
+  tie(_currentWayptNode, "TTW-sec", SGRawValueMethods<GPS, double>
     (*this, &GPS::getWP1TTW, NULL));
-  tie(wp1_node, "TTW", SGRawValueMethods<GPS, const char*>
+  tie(_currentWayptNode, "TTW", SGRawValueMethods<GPS, const char*>
     (*this, &GPS::getWP1TTWString, NULL));
   
-  tie(wp1_node, "course-deviation-deg", SGRawValueMethods<GPS, double>
+  tie(_currentWayptNode, "course-deviation-deg", SGRawValueMethods<GPS, double>
     (*this, &GPS::getWP1CourseDeviation, NULL));
-  tie(wp1_node, "course-error-nm", SGRawValueMethods<GPS, double>
+  tie(_currentWayptNode, "course-error-nm", SGRawValueMethods<GPS, double>
     (*this, &GPS::getWP1CourseErrorNm, NULL));
-  tie(wp1_node, "to-flag", SGRawValueMethods<GPS, bool>
+  tie(_currentWayptNode, "to-flag", SGRawValueMethods<GPS, bool>
     (*this, &GPS::getWP1ToFlag, NULL));
-  tie(wp1_node, "from-flag", SGRawValueMethods<GPS, bool>
+  tie(_currentWayptNode, "from-flag", SGRawValueMethods<GPS, bool>
     (*this, &GPS::getWP1FromFlag, NULL));
 
 // leg properties (only valid in DTO/LEG modes, not OBS)
   tie(wp_node, "leg-distance-nm", SGRawValueMethods<GPS, double>(*this, &GPS::getLegDistance, NULL));
   tie(wp_node, "leg-true-course-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getLegCourse, NULL));
   tie(wp_node, "leg-mag-course-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getLegMagCourse, NULL));
-  tie(wp_node, "alt-dist-ratio", SGRawValueMethods<GPS, double>(*this, &GPS::getAltDistanceRatio, NULL));
 
 // navradio slaving properties  
   tie(_gpsNode, "cdi-deflection", SGRawValueMethods<GPS,double>
@@ -426,12 +415,11 @@ GPS::clearOutput()
   _last_vertical_speed = 0.0;
   _last_true_track = 0.0;
   _lastEWVelocity = _lastNSVelocity = 0.0;
+  _currentWaypt = _prevWaypt = NULL;
+  _legDistanceNm = -1.0;
   
   _raim_node->setDoubleValue(0.0);
   _indicated_pos = SGGeod();
-  _wp1DistanceM = 0.0;
-  _wp1TrueBearing = 0.0;
-  _wp1_position = SGGeod();
   _odometer_node->setDoubleValue(0);
   _trip_odometer_node->setDoubleValue(0);
   _tracking_bug_node->setDoubleValue(0);
@@ -455,61 +443,28 @@ GPS::update (double delta_time_sec)
   if (delta_time_sec <= 0.0) {
     return; // paused, don't bother
   }    
-    // TODO: Add noise and other errors.
-/*
-
-    // Bias and random error
-    double random_factor = sg_random();
-    double random_error = 1.4;
-    double error_radius = 5.1;
-    double bias_max_radius = 5.1;
-    double random_max_radius = 1.4;
-
-    bias_length += (random_factor-0.5) * 1.0e-3;
-    if (bias_length <= 0.0) bias_length = 0.0;
-    else if (bias_length >= bias_max_radius) bias_length = bias_max_radius;
-    bias_angle  += (random_factor-0.5) * 1.0e-3;
-    if (bias_angle <= 0.0) bias_angle = 0.0;
-    else if (bias_angle >= 360.0) bias_angle = 360.0;
-
-    double random_length = random_factor * random_max_radius;
-    double random_angle = random_factor * 360.0;
-
-    double bias_x = bias_length * cos(bias_angle * SG_PI / 180.0);
-    double bias_y = bias_length * sin(bias_angle * SG_PI / 180.0);
-    double random_x = random_length * cos(random_angle * SG_PI / 180.0);
-    double random_y = random_length * sin(random_angle * SG_PI / 180.0);
-    double error_x = bias_x + random_x;
-    double error_y = bias_y + random_y;
-    double error_length = sqrt(error_x*error_x + error_y*error_y);
-    double error_angle = atan(error_y / error_x) * 180.0 / SG_PI;
-
-    double lat2;
-    double lon2;
-    double az2;
-    geo_direct_wgs_84 ( altitude_m, latitude_deg,
-                        longitude_deg, error_angle,
-                        error_length, &lat2, &lon2,
-                        &az2 );
-    //cout << lat2 << " " << lon2 << endl;
-    printf("%f %f \n", bias_length, bias_angle);
-    printf("%3.7f %3.7f \n", lat2, lon2);
-    printf("%f %f \n", error_length, error_angle);
-
-*/
+  
   _raim_node->setDoubleValue(1.0);
   _indicated_pos = _position.get();
   updateBasicData(delta_time_sec);
 
   if (_dataValid) {
-    if (_mode != "obs") {
-      updateTurn();
-    }
+    if (_wayptController.get()) {
+      _wayptController->update();
+      SGGeod p(_wayptController->position());
+      _currentWayptNode->setDoubleValue("longitude-deg", p.getLongitudeDeg());
+      _currentWayptNode->setDoubleValue("latitude-deg", p.getLatitudeDeg());
+      _currentWayptNode->setDoubleValue("altitude-ft", p.getElevationFt());
       
-    updateWaypoints();
+      _desiredCourse = getLegMagCourse();
+      
+      updateTurn();
+      updateRouteData();
+    }
+
+    
     updateTrackingBug();
     updateReferenceNavaid(delta_time_sec);
-    updateRouteData();
     driveAutopilot();
   }
   
@@ -538,6 +493,49 @@ GPS::update (double delta_time_sec)
   _lastPosValid = true;
 }
 
+///////////////////////////////////////////////////////////////////////////
+// implement the RNAV interface 
+SGGeod GPS::position()
+{
+  if (!_dataValid) {
+    return SGGeod();
+  }
+  
+  return _indicated_pos;
+}
+
+double GPS::trackDeg()
+{
+  return _last_true_track;
+}
+
+double GPS::groundSpeedKts()
+{
+  return _last_speed_kts;
+}
+
+double GPS::vspeedFPM()
+{
+  return _last_vertical_speed;
+}
+
+double GPS::magvarDeg()
+{
+  return _magvar_node->getDoubleValue();
+}
+
+double GPS::overflightArmDistanceM()
+{
+  return _config.overflightArmDistanceNm() * SG_NM_TO_METER;
+}
+
+double GPS::selectedMagCourse()
+{
+  return _selectedCourse;
+}
+
+///////////////////////////////////////////////////////////////////////////
+
 void
 GPS::updateBasicData(double dt)
 {
@@ -601,13 +599,6 @@ GPS::updateTrackingBug()
   _magnetic_bug_error_node->setDoubleValue(magnetic_bug_error);
 }
 
-void
-GPS::updateWaypoints()
-{  
-  double az2;
-  SGGeodesy::inverse(_indicated_pos, _wp1_position, _wp1TrueBearing, az2,_wp1DistanceM);
-}
-
 void GPS::updateReferenceNavaid(double dt)
 {
   if (!_ref_navaid_set) {
@@ -690,7 +681,9 @@ void GPS::routeActivated()
     }
   } else if (_mode == "leg") {
     SG_LOG(SG_INSTR, SG_INFO, "GPS::route deactivated, switching to OBS mode");
-    selectOBSMode();
+    // select OBS mode, but keep current waypoint-as is
+    _mode = "obs";
+    wp1Changed();
   }
 }
 
@@ -701,8 +694,8 @@ void GPS::routeManagerSequenced()
     return;
   }
   
-  int index = _routeMgr->currentWaypoint(),
-    count = _routeMgr->size();
+  int index = _routeMgr->currentIndex(),
+    count = _routeMgr->numWaypts();
   if ((index < 0) || (index >= count)) {
     SG_LOG(SG_INSTR, SG_ALERT, "GPS: malformed route, index=" << index);
     return;
@@ -711,17 +704,15 @@ void GPS::routeManagerSequenced()
   SG_LOG(SG_INSTR, SG_INFO, "GPS waypoint index is now " << index);
   
   if (index > 0) {
-    SGWayPoint wp0(_routeMgr->get_waypoint(index - 1));
-    _wp0Ident = wp0.get_id();
-    _wp0Name = wp0.get_name();
-    _wp0_position = wp0.get_target();
-
+    _prevWaypt = _routeMgr->previousWaypt();
+    if (_prevWaypt->flag(WPT_DYNAMIC)) {
+      _wp0_position = _indicated_pos;
+    } else {
+      _wp0_position = _prevWaypt->position();
+    }
   }
   
-  SGWayPoint wp1(_routeMgr->get_waypoint(index));
-  _wp1Ident = wp1.get_id();
-  _wp1Name = wp1.get_name();
-  _wp1_position = wp1.get_target();
+  _currentWaypt = _routeMgr->currentWaypt();
 
   _desiredCourse = getLegMagCourse();
   _desiredCourseNode->fireValueChanged();
@@ -745,8 +736,8 @@ void GPS::routeFinished()
   }
   
   SG_LOG(SG_INSTR, SG_INFO, "GPS route finished, reverting to OBS");
+  // select OBS mode, but keep current waypoint-as is
   _mode = "obs";
-  _wp0_position = _indicated_pos;
   wp1Changed();
 }
 
@@ -800,7 +791,7 @@ void GPS::updateTurn()
     double deviationNm = (distanceM * SG_METER_TO_NM) - _turnRadius;
     double deviationDeg = desiredCourse - getMagTrack();
     deviationNm = copysign(deviationNm, deviationDeg);
-    // FXIME
+    // FIXME
     //_wp1_course_deviation_node->setDoubleValue(deviationDeg);
     //_wp1_course_error_nm_node->setDoubleValue(deviationNm);
     //_cdiDeflectionNode->setDoubleValue(deviationDeg);
@@ -809,26 +800,29 @@ void GPS::updateTurn()
 
 void GPS::updateOverflight()
 {
-  if ((_wp1DistanceM * SG_METER_TO_NM) > _config.overflightArmDistanceNm()) {
+  if (!_wayptController->isDone()) {
     return;
   }
   
-  if (getWP1ToFlag()) {
-    return; // still heading towards the WP
-  }
-  
   if (_mode == "dto") {
     SG_LOG(SG_INSTR, SG_INFO, "GPS DTO reached destination point");
     
     // check for wp1 being on active route - resume leg mode
     if (_routeMgr->isRouteActive()) {
-      int index = _routeMgr->findWaypoint(_wp1_position);
+      int index = _routeMgr->findWayptIndex(_currentWaypt->position());
       if (index >= 0) {
         SG_LOG(SG_INSTR, SG_INFO, "GPS DTO, resuming LEG mode at wp:" << index);
         _mode = "leg";
         _routeMgr->jumpToIndex(index);
       }
     }
+    
+    if (_mode == "dto") {
+      // if we didn't enter leg mode, drop back to OBS mode
+      // select OBS mode, but keep current waypoint-as is
+      _mode = "obs";
+      wp1Changed();
+    }
   } else if (_mode == "leg") {
     SG_LOG(SG_INSTR, SG_INFO, "GPS doing overflight sequencing");
     _routeMgr->sequence();
@@ -867,8 +861,8 @@ void GPS::computeTurnData()
     return;
   }
   
-  int curIndex = _routeMgr->currentWaypoint();
-  if ((curIndex + 1) >= _routeMgr->size()) {
+  WayptRef next = _routeMgr->nextWaypt();
+  if (!next || next->flag(WPT_DYNAMIC)) {
     _anticipateTurn = false;
     return;
   }
@@ -880,11 +874,9 @@ void GPS::computeTurnData()
   
   _turnStartBearing = _desiredCourse;
 // compute next leg course
-  SGWayPoint wp1(_routeMgr->get_waypoint(curIndex)),
-    wp2(_routeMgr->get_waypoint(curIndex + 1));
   double crs, dist;
-  wp2.CourseAndDistance(wp1, &crs, &dist);
-  
+  boost::tie(crs, dist) = next->courseAndDistanceFrom(_currentWaypt->position());
+    
 
 // compute offset bearing
   _turnAngle = crs - _turnStartBearing;
@@ -897,9 +889,9 @@ void GPS::computeTurnData()
     ", out=" << crs << "; turnAngle=" << _turnAngle << ", median=" << median 
     << ", offset=" << offsetBearing);
 
-  SG_LOG(SG_INSTR, SG_INFO, "next leg is now:" << wp1.get_id() << "->" << wp2.get_id());
+  SG_LOG(SG_INSTR, SG_INFO, "next leg is now:" << _currentWaypt->ident() << "->" << next->ident());
 
-  _turnPt = _wp1_position;
+  _turnPt = _currentWaypt->position();
   _anticipateTurn = true;
 }
 
@@ -945,10 +937,10 @@ double GPS::computeTurnRadiusNm(double aGroundSpeedKts) const
 
 void GPS::updateRouteData()
 {
-  double totalDistance = _wp1DistanceM * SG_METER_TO_NM;
+  double totalDistance = _wayptController->distanceToWayptM() * SG_METER_TO_NM;
   // walk all waypoints from wp2 to route end, and sum
-  for (int i=_routeMgr->currentWaypoint()+1; i<_routeMgr->size(); ++i) {
-    totalDistance += _routeMgr->get_waypoint(i).get_distance();
+  for (int i=_routeMgr->currentIndex()+1; i<_routeMgr->numWaypts(); ++i) {
+    //totalDistance += _routeMgr->get_waypoint(i).get_distance();
   }
   
   _routeDistanceNm->setDoubleValue(totalDistance * SG_METER_TO_NM);
@@ -979,13 +971,36 @@ void GPS::driveAutopilot()
 
 void GPS::wp1Changed()
 {
+  if (_mode == "leg") {
+    _wayptController.reset(WayptController::createForWaypt(this, _currentWaypt));
+  } else if (_mode == "obs") {
+    _wayptController.reset(new OBSController(this, _currentWaypt));
+  } else if (_mode == "dto") {
+    _wayptController.reset(new DirectToController(this, _currentWaypt, _wp0_position));
+  }
+
+  _wayptController->init();
+
+  if (_mode == "obs") {
+    _legDistanceNm = -1.0;
+  } else {
+    _wayptController->update();
+    _legDistanceNm = _wayptController->distanceToWayptM() * SG_METER_TO_NM;
+  }
+  
   if (!_config.driveAutopilot()) {
     return;
   }
   
-  double altFt = _wp1_position.getElevationFt();
-  if (altFt > -9990.0) {
-    _apTargetAltitudeFt->setDoubleValue(altFt);
+  RouteRestriction ar = _currentWaypt->altitudeRestriction();
+  double restrictAlt = _currentWaypt->altitudeFt();
+  double alt = _indicated_pos.getElevationFt();
+  if ((ar == RESTRICT_AT) ||
+       ((ar == RESTRICT_ABOVE) && (alt < restrictAlt)) ||
+       ((ar == RESTRICT_BELOW) && (alt > restrictAlt)))
+  {
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "current waypt has altitude set, setting on AP");
+    _apTargetAltitudeFt->setDoubleValue(restrictAlt);
   }
 }
 
@@ -1011,16 +1026,16 @@ double GPS::getLegDistance() const
     return -1;
   }
   
-  return SGGeodesy::distanceNm(_wp0_position, _wp1_position);
+  return _legDistanceNm;
 }
 
 double GPS::getLegCourse() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return -9999.0;
   }
   
-  return SGGeodesy::courseDeg(_wp0_position, _wp1_position);
+  return _wayptController->targetTrackDeg();
 }
 
 double GPS::getLegMagCourse() const
@@ -1034,21 +1049,6 @@ double GPS::getLegMagCourse() const
   return m;
 }
 
-double GPS::getAltDistanceRatio() const
-{
-  if (!_dataValid || (_mode == "obs")) {
-    return 0.0;
-  }
-  
-  double dist = SGGeodesy::distanceM(_wp0_position, _wp1_position);
-  if ( dist <= 0.0 ) {
-    return 0.0;
-  }
-  
-  double alt_difference_m = _wp0_position.getElevationM() - _wp1_position.getElevationM();
-  return alt_difference_m / dist;
-}
-
 double GPS::getMagTrack() const
 {
   if (!_dataValid) {
@@ -1086,16 +1086,12 @@ const char* GPS::getWP0Ident() const
     return "";
   }
   
-  return _wp0Ident.c_str();
+  return _prevWaypt->ident().c_str();
 }
 
 const char* GPS::getWP0Name() const
 {
-  if (!_dataValid || (_mode != "leg")) {
-    return "";
-  }
-  
-  return _wp0Name.c_str();
+  return "";
 }
 
 const char* GPS::getWP1Ident() const
@@ -1104,56 +1100,49 @@ const char* GPS::getWP1Ident() const
     return "";
   }
   
-  return _wp1Ident.c_str();
+  return _currentWaypt->ident().c_str();
 }
 
 const char* GPS::getWP1Name() const
 {
-  if (!_dataValid) {
-    return "";
-  }
-
-  return _wp1Name.c_str();
+  return "";
 }
 
 double GPS::getWP1Distance() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return -1.0;
   }
   
-  return _wp1DistanceM * SG_METER_TO_NM;
+  return _wayptController->distanceToWayptM() * SG_METER_TO_NM;
 }
 
 double GPS::getWP1TTW() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return -1.0;
   }
   
-  if (_last_speed_kts < 1.0) {
-    return -1.0;
-  }
-  
-  return (getWP1Distance() / _last_speed_kts) * 3600.0;
+  return _wayptController->timeToWaypt();
 }
 
 const char* GPS::getWP1TTWString() const
 {
-  if (!_dataValid) {
+  double t = getWP1TTW();
+  if (t <= 0.0) {
     return "";
   }
   
-  return makeTTWString(getWP1TTW());
+  return makeTTWString(t);
 }
 
 double GPS::getWP1Bearing() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return -9999.0;
   }
   
-  return _wp1TrueBearing;
+  return _wayptController->trueBearingDeg();
 }
 
 double GPS::getWP1MagBearing() const
@@ -1162,56 +1151,41 @@ double GPS::getWP1MagBearing() const
     return -9999.0;
   }
 
-  double magBearing = _wp1TrueBearing - _magvar_node->getDoubleValue();
+  double magBearing =  _wayptController->trueBearingDeg() - _magvar_node->getDoubleValue();
   SG_NORMALIZE_RANGE(magBearing, 0.0, 360.0);
   return magBearing;
 }
 
 double GPS::getWP1CourseDeviation() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return 0.0;
   }
-  
-  double dev = getWP1MagBearing() - _desiredCourse;
-  SG_NORMALIZE_RANGE(dev, -180.0, 180.0);
-  
-  if (fabs(dev) > 90.0) {
-    // When the course is away from the waypoint, 
-    // it makes sense to change the sign of the deviation.
-    dev *= -1.0;
-    SG_NORMALIZE_RANGE(dev, -90.0, 90.0);
-  }
-  
-  return dev;
+
+  return _wayptController->courseDeviationDeg();
 }
 
 double GPS::getWP1CourseErrorNm() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return 0.0;
   }
   
-  double radDev = getWP1CourseDeviation() * SG_DEGREES_TO_RADIANS;
-  double course_error_m = sin(radDev) * _wp1DistanceM;
-  return course_error_m * SG_METER_TO_NM;
+  return _wayptController->xtrackErrorNm();
 }
 
 bool GPS::getWP1ToFlag() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return false;
   }
   
-  double dev = getWP1MagBearing() - _desiredCourse;
-  SG_NORMALIZE_RANGE(dev, -180.0, 180.0);
-
-  return (fabs(dev) < 90.0);
+  return _wayptController->toFlag();
 }
 
 bool GPS::getWP1FromFlag() const
 {
-  if (!_dataValid) {
+  if (!_dataValid || !_wayptController.get()) {
     return false;
   }
   
@@ -1278,9 +1252,9 @@ void GPS::setCommand(const char* aCmd)
     defineWaypoint();
   } else if (!strcmp(aCmd, "route-insert-before")) {
     int index = _scratchNode->getIntValue("index");
-    if (index < 0 || (_routeMgr->size() == 0)) {
-      index = _routeMgr->size();
-    } else if (index >= _routeMgr->size()) {
+    if (index < 0 || (_routeMgr->numWaypts() == 0)) {
+      index = _routeMgr->numWaypts();
+    } else if (index >= _routeMgr->numWaypts()) {
       SG_LOG(SG_INSTR, SG_WARN, "GPS:route-insert-before, bad index:" << index);
       return;
     }
@@ -1288,9 +1262,9 @@ void GPS::setCommand(const char* aCmd)
     insertWaypointAtIndex(index);
   } else if (!strcmp(aCmd, "route-insert-after")) {
     int index = _scratchNode->getIntValue("index");
-    if (index < 0 || (_routeMgr->size() == 0)) {
-      index = _routeMgr->size();
-    } else if (index >= _routeMgr->size()) {
+    if (index < 0 || (_routeMgr->numWaypts() == 0)) {
+      index = _routeMgr->numWaypts();
+    } else if (index >= _routeMgr->numWaypts()) {
       SG_LOG(SG_INSTR, SG_WARN, "GPS:route-insert-after, bad index:" << index);
       return;
     } else {
@@ -1301,8 +1275,8 @@ void GPS::setCommand(const char* aCmd)
   } else if (!strcmp(aCmd, "route-delete")) {
     int index = _scratchNode->getIntValue("index");
     if (index < 0) {
-      index = _routeMgr->size();
-    } else if (index >= _routeMgr->size()) {
+      index = _routeMgr->numWaypts();
+    } else if (index >= _routeMgr->numWaypts()) {
       SG_LOG(SG_INSTR, SG_WARN, "GPS:route-delete, bad index:" << index);
       return;
     }
@@ -1332,18 +1306,16 @@ bool GPS::isScratchPositionValid() const
 }
 
 void GPS::directTo()
-{
-  _wp0_position = _indicated_pos;
-  
-  if (isScratchPositionValid()) {
-    _wp1Ident = _scratchNode->getStringValue("ident");
-    _wp1Name = _scratchNode->getStringValue("name");
-    _wp1_position = _scratchPos;
+{  
+  if (!isScratchPositionValid()) {
+    return;
   }
   
+  _prevWaypt = NULL;
+  _wp0_position = _indicated_pos;
+  _currentWaypt = new BasicWaypt(_scratchPos, _scratchNode->getStringValue("ident"), NULL);
   _mode = "dto";
-  _desiredCourse = getLegMagCourse();
-  _desiredCourseNode->fireValueChanged();
+
   clearScratch();
   wp1Changed();
 }
@@ -1359,8 +1331,8 @@ void GPS::loadRouteWaypoint()
   int index = _scratchNode->getIntValue("index", -9999);
   clearScratch();
   
-  if ((index < 0) || (index >= _routeMgr->size())) { // no index supplied, use current wp
-    index = _routeMgr->currentWaypoint();
+  if ((index < 0) || (index >= _routeMgr->numWaypts())) { // no index supplied, use current wp
+    index = _routeMgr->currentIndex();
   }
   
   _searchIsRoute = true;
@@ -1370,18 +1342,16 @@ void GPS::loadRouteWaypoint()
 void GPS::setScratchFromRouteWaypoint(int aIndex)
 {
   assert(_searchIsRoute);
-  if ((aIndex < 0) || (aIndex >= _routeMgr->size())) {
+  if ((aIndex < 0) || (aIndex >= _routeMgr->numWaypts())) {
     SG_LOG(SG_INSTR, SG_WARN, "GPS:setScratchFromRouteWaypoint: route-index out of bounds");
     return;
   }
   
   _searchResultIndex = aIndex;
-  SGWayPoint wp(_routeMgr->get_waypoint(aIndex));
-  _scratchNode->setStringValue("name", wp.get_name());
-  _scratchNode->setStringValue("ident", wp.get_id());
-  _scratchPos = wp.get_target();
+  WayptRef wp = _routeMgr->wayptAtIndex(aIndex);
+  _scratchNode->setStringValue("ident", wp->ident());
+  _scratchPos = wp->position();
   _scratchValid = true;
-  _scratchNode->setDoubleValue("course", wp.get_track());
   _scratchNode->setIntValue("index", aIndex);
 }
 
@@ -1476,9 +1446,9 @@ void GPS::search()
 
   auto_ptr<FGPositioned::Filter> f(createFilter(_searchType));
   if (_searchNames) {
-    _searchResults = FGPositioned::findAllWithName(_searchQuery, f.get());
+    _searchResults = FGPositioned::findAllWithName(_searchQuery, f.get(), _searchExact);
   } else {
-    _searchResults = FGPositioned::findAllWithIdent(_searchQuery, f.get());
+    _searchResults = FGPositioned::findAllWithIdent(_searchQuery, f.get(), _searchExact);
   }
   
   bool orderByRange = _scratchNode->getBoolValue("order-by-distance", true);
@@ -1498,7 +1468,7 @@ bool GPS::getScratchHasNext() const
 {
   int lastResult;
   if (_searchIsRoute) {
-    lastResult = _routeMgr->size() - 1;
+    lastResult = _routeMgr->numWaypts() - 1;
   } else {
     lastResult = (int) _searchResults.size() - 1;
   }
@@ -1584,14 +1554,14 @@ void GPS::addAirportToScratch(FGAirport* aAirport)
 
 void GPS::selectOBSMode()
 {
-  if (isScratchPositionValid()) {
-    _wp1Ident = _scratchNode->getStringValue("ident");
-    _wp1Name = _scratchNode->getStringValue("name");
-    _wp1_position = _scratchPos;
+  if (!isScratchPositionValid()) {
+    return;
   }
   
   SG_LOG(SG_INSTR, SG_INFO, "GPS switching to OBS mode");
   _mode = "obs";
+
+  _currentWaypt = new BasicWaypt(_scratchPos, _scratchNode->getStringValue("ident"), NULL);
   _wp0_position = _indicated_pos;
   wp1Changed();
 }
@@ -1680,7 +1650,7 @@ void GPS::defineWaypoint()
 void GPS::insertWaypointAtIndex(int aIndex)
 {
   // note we do allow index = routeMgr->size(), that's an append
-  if ((aIndex < 0) || (aIndex > _routeMgr->size())) {
+  if ((aIndex < 0) || (aIndex > _routeMgr->numWaypts())) {
     throw sg_range_exception("GPS::insertWaypointAtIndex: index out of bounds");
   }
   
@@ -1690,18 +1660,18 @@ void GPS::insertWaypointAtIndex(int aIndex)
   }
   
   string ident = _scratchNode->getStringValue("ident");
-  string name = _scratchNode->getStringValue("name");
-  
-  _routeMgr->add_waypoint(SGWayPoint(_scratchPos, ident, name), aIndex);
+
+  WayptRef wpt = new BasicWaypt(_scratchPos, ident, NULL);
+  _routeMgr->insertWayptAtIndex(wpt, aIndex);
 }
 
 void GPS::removeWaypointAtIndex(int aIndex)
 {
-  if ((aIndex < 0) || (aIndex >= _routeMgr->size())) {
+  if ((aIndex < 0) || (aIndex >= _routeMgr->numWaypts())) {
     throw sg_range_exception("GPS::removeWaypointAtIndex: index out of bounds");
   }
   
-  _routeMgr->pop_waypoint(aIndex);
+  _routeMgr->removeWayptAtIndex(aIndex);
 }
 
 void GPS::tieSGGeod(SGPropertyNode* aNode, SGGeod& aRef, 
diff --git a/src/Instrumentation/gps.hxx b/src/Instrumentation/gps.hxx
index d6c3a7069..3005997c0 100644
--- a/src/Instrumentation/gps.hxx
+++ b/src/Instrumentation/gps.hxx
@@ -13,7 +13,8 @@
 #include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/math/SGMath.hxx>
 
-#include "Navaids/positioned.hxx"
+#include <Navaids/positioned.hxx>
+#include <Instrumentation/rnav_waypt_controller.hxx>
 
 // forward decls
 class SGRoute;
@@ -73,20 +74,29 @@ private:
  * /instrumentation/gps/magnetic-bug-error-deg
 
  */
-class GPS : public SGSubsystem
+class GPS : public SGSubsystem, public flightgear::RNAV
 {
-
 public:
-
     GPS (SGPropertyNode *node);
     GPS ();
     virtual ~GPS ();
 
+  // SGSubsystem interface
     virtual void init ();
     virtual void update (double delta_time_sec);
     
     virtual void bind();
     virtual void unbind();
+
+  // RNAV interface
+    virtual SGGeod position();
+    virtual double trackDeg();
+    virtual double groundSpeedKts();
+    virtual double vspeedFPM();
+    virtual double magvarDeg();
+    virtual double selectedMagCourse();
+    virtual double overflightArmDistanceM();
+    
 private:
     friend class GPSListener;
     friend class SearchFilter;
@@ -188,7 +198,6 @@ private:
     void clearOutput();
 
     void updateBasicData(double dt);
-    void updateWaypoints();
 
     void updateTrackingBug();
     void updateReferenceNavaid(double dt);
@@ -275,7 +284,6 @@ private:
   double getLegDistance() const;
   double getLegCourse() const;
   double getLegMagCourse() const;
-  double getAltDistanceRatio() const;
   
   double getTrueTrack() const { return _last_true_track; }
   double getMagTrack() const;
@@ -325,6 +333,7 @@ private:
 
 // members
   SGPropertyNode_ptr _gpsNode;
+  SGPropertyNode_ptr _currentWayptNode;
   SGPropertyNode_ptr _magvar_node;
   SGPropertyNode_ptr _serviceable_node;
   SGPropertyNode_ptr _electrical_node;
@@ -379,10 +388,8 @@ private:
   
   SGGeodProperty _position;
   SGGeod _wp0_position;
-  SGGeod _wp1_position;
   SGGeod _indicated_pos;
-  std::string _wp0Ident, _wp0Name, _wp1Ident, _wp1Name;
-  double _wp1DistanceM, _wp1TrueBearing;
+  double _legDistanceNm;
   
 // scratch data
   SGGeod _scratchPos;
@@ -410,7 +417,11 @@ private:
     SGGeod _turnPt;
     SGGeod _turnCentre;
   
+  std::auto_ptr<flightgear::WayptController> _wayptController;
+  
   SGPropertyNode_ptr _realismSimpleGps; ///< should the GPS be simple or realistic?
+  flightgear::WayptRef _prevWaypt;
+  flightgear::WayptRef _currentWaypt;
   
 // autopilot drive properties
   SGPropertyNode_ptr _apDrivingFlag;
diff --git a/src/Instrumentation/rnav_waypt_controller.cxx b/src/Instrumentation/rnav_waypt_controller.cxx
new file mode 100644
index 000000000..fbdb5eeb1
--- /dev/null
+++ b/src/Instrumentation/rnav_waypt_controller.cxx
@@ -0,0 +1,697 @@
+// rnav_waypt_controller.cxx - Waypoint-specific behaviours for RNAV systems
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#include "rnav_waypt_controller.hxx"
+
+#include <simgear/sg_inlines.h>
+#include <simgear/structure/exception.hxx>
+
+#include <Airports/runways.hxx>
+
+namespace flightgear
+{
+
+const double KNOTS_TO_METRES_PER_SECOND = SG_NM_TO_METER / 3600.0;
+
+double pmod(double x, double y)
+{
+  if (x < 0.0) {
+    return -fmod(x, y);
+  } else {
+    return fmod(x,y);
+  }
+}
+
+// implementation of
+// http://williams.best.vwh.net/avform.htm#Intersection
+bool geocRadialIntersection(const SGGeoc& a, double r1, const SGGeoc& b, double r2, SGGeoc& result)
+{
+  double crs13 = r1 * SG_DEGREES_TO_RADIANS;
+  double crs23 = r2 * SG_DEGREES_TO_RADIANS;
+  double dst12 = SGGeodesy::distanceRad(a, b);
+  
+  //IF sin(lon2-lon1)<0
+  // crs12=acos((sin(lat2)-sin(lat1)*cos(dst12))/(sin(dst12)*cos(lat1)))
+  // crs21=2.*pi-acos((sin(lat1)-sin(lat2)*cos(dst12))/(sin(dst12)*cos(lat2)))
+  // ELSE
+  // crs12=2.*pi-acos((sin(lat2)-sin(lat1)*cos(dst12))/(sin(dst12)*cos(lat1)))
+  // crs21=acos((sin(lat1)-sin(lat2)*cos(dst12))/(sin(dst12)*cos(lat2)))
+  // ENDIF
+  
+  
+ // double diffLon = b.getLongitudeRad() - a.getLongitudeRad();
+  
+  double sinLat1 = sin(a.getLatitudeRad());
+  double cosLat1 = cos(a.getLatitudeRad());
+ // double sinLat2 = sin(b.getLatitudeRad());
+  //double cosLat2 = cos(b.getLatitudeRad());
+  double sinDst12 = sin(dst12);
+  double cosDst12 = cos(dst12);
+  
+  double crs12 = SGGeodesy::courseRad(a, b),
+    crs21 = SGGeodesy::courseRad(b, a);
+    
+  double degCrs12 = crs12 * SG_RADIANS_TO_DEGREES;
+  double degCrs21 = crs21 * SG_RADIANS_TO_DEGREES;
+    
+ /* 
+  if (sin(diffLon) < 0.0) {
+    crs12 = acos((sinLat2 - sinLat1 * cosDst12) / (sinDst12 * cosLat1));
+    crs21 = SGMiscd::twopi() - acos((sinLat1 - sinLat2*cosDst12)/(sinDst12*cosLat2));
+  } else {
+    crs12 = SGMiscd::twopi() - acos((sinLat2 - sinLat1 * cosDst12)/(sinDst12 * cosLat1));
+    crs21 = acos((sinLat1 - sinLat2 * cosDst12)/(sinDst12 * cosLat2));
+  }
+  */
+  
+  double ang1 = SGMiscd::normalizeAngle2(crs13-crs12);
+  double ang2 = SGMiscd::normalizeAngle2(crs21-crs23);
+    
+  if ((sin(ang1) == 0.0) && (sin(ang2) == 0.0)) {
+    SG_LOG(SG_GENERAL, SG_WARN, "geocRadialIntersection: infinity of intersections");
+    return false;
+  }
+  
+  if ((sin(ang1)*sin(ang2))<0.0) {
+    SG_LOG(SG_GENERAL, SG_WARN, "geocRadialIntersection: intersection ambiguous");
+    return false;
+  }
+  
+  ang1 = fabs(ang1);
+  ang2 = fabs(ang2);
+
+  //ang3=acos(-cos(ang1)*cos(ang2)+sin(ang1)*sin(ang2)*cos(dst12)) 
+  //dst13=atan2(sin(dst12)*sin(ang1)*sin(ang2),cos(ang2)+cos(ang1)*cos(ang3))
+  //lat3=asin(sin(lat1)*cos(dst13)+cos(lat1)*sin(dst13)*cos(crs13))
+  
+  //lon3=mod(lon1-dlon+pi,2*pi)-pi
+
+  double ang3 = acos(-cos(ang1) * cos(ang2) + sin(ang1) * sin(ang2) * cosDst12);
+  double dst13 = atan2(sinDst12 * sin(ang1) * sin(ang2), cos(ang2) + cos(ang1)*cos(ang3));
+
+  SGGeoc pt3;
+  SGGeodesy::advanceRadM(a, crs13, dst13 * SG_RAD_TO_NM * SG_NM_TO_METER, pt3);
+
+  double lat3 = asin(sinLat1 * cos(dst13) + cosLat1 * sin(dst13) * cos(crs13));
+  
+  //dlon=atan2(sin(crs13)*sin(dst13)*cos(lat1),cos(dst13)-sin(lat1)*sin(lat3))
+  double dlon = atan2(sin(crs13)*sin(dst13)*cosLat1, cos(dst13)- (sinLat1 * sin(lat3)));
+  double lon3 = SGMiscd::normalizeAngle(-a.getLongitudeRad()-dlon);
+  
+  result = SGGeoc::fromRadM(-lon3, lat3, a.getRadiusM());
+  //result = pt3;
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
+WayptController::~WayptController()
+{
+}
+
+void WayptController::init()
+{
+}
+
+void WayptController::setDone()
+{
+  if (_isDone) {
+    SG_LOG(SG_AUTOPILOT, SG_WARN, "already done @ WayptController::setDone");
+  }
+  
+  _isDone = true;
+}
+
+double WayptController::timeToWaypt() const
+{
+  double gs = _rnav->groundSpeedKts();
+  if (gs < 1.0) {
+    return -1.0; // stationary
+  }
+  
+  gs*= KNOTS_TO_METRES_PER_SECOND;
+  return (distanceToWayptM() / gs);
+}
+
+//////////////
+
+class BasicWayptCtl : public WayptController
+{
+public:
+  BasicWayptCtl(RNAV* aRNAV, const WayptRef& aWpt) :
+    WayptController(aRNAV, aWpt)
+  {
+    if (aWpt->flag(WPT_DYNAMIC)) {
+      throw sg_exception("BasicWayptCtrl doesn't work with dynamic waypoints");
+    }
+  }
+  
+  virtual void init()
+  {
+    _targetTrack = SGGeodesy::courseDeg(_rnav->position(), _waypt->position());
+  }
+
+  virtual void update()
+  {
+    double brg, az2;
+    SGGeodesy::inverse(_rnav->position(), _waypt->position(), brg, az2, _distanceM); 
+    _courseDev = brg - _targetTrack;
+    SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0);
+    
+    if ((fabs(_courseDev) > 90.0) && (_distanceM < _rnav->overflightArmDistanceM())) {
+      setDone();
+    }
+  } 
+
+  virtual double distanceToWayptM() const
+  {
+    return _distanceM;
+  }
+  
+  virtual double xtrackErrorNm() const
+  {
+    double x = sin(courseDeviationDeg() * SG_DEGREES_TO_RADIANS) * _distanceM;
+    return x * SG_METER_TO_NM;
+  }
+  
+  virtual bool toFlag() const
+  {
+    return (fabs(_courseDev) < 90.0);
+  }
+  
+  virtual double courseDeviationDeg() const
+  {
+    return _courseDev;
+  }
+  
+  virtual double trueBearingDeg() const
+  {
+    return SGGeodesy::courseDeg(_rnav->position(), _waypt->position());
+  }
+  
+  virtual SGGeod position() const
+  {
+    return _waypt->position();
+  }
+
+private:
+  double _distanceM;
+  double _courseDev;
+};
+
+/**
+ * Special controller for runways. For runways, we want very narrow deviation
+ * contraints, and to understand that any point along the paved area is
+ * equivalent to being 'at' the runway.
+ */
+class RunwayCtl : public WayptController
+{
+public:
+  RunwayCtl(RNAV* aRNAV, const WayptRef& aWpt) :
+    WayptController(aRNAV, aWpt)
+  {
+  }
+  
+  virtual void init()
+  {
+    _runway = static_cast<RunwayWaypt*>(_waypt.get())->runway();
+    _targetTrack = _runway->headingDeg();
+  }
+
+  virtual void update()
+  {
+    double brg, az2;
+    // use the far end of the runway for course deviation calculations. 
+    // this should do the correct thing both for takeoffs (including entering 
+    // the runway at a taxiway after the threshold) and also landings.
+    // seperately compute the distance to the threshold for timeToWaypt calc
+    SGGeodesy::inverse(_rnav->position(), _runway->end(), brg, az2, _distanceM); 
+    double _courseDev = brg - _targetTrack;
+    SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0);
+    
+    if (fabs(_courseDev) > 90.0) {
+      setDone();
+    }
+  } 
+  
+  virtual double distanceToWayptM() const
+  {
+    return SGGeodesy::distanceM(_rnav->position(), _runway->threshold());
+  }
+  
+  virtual double xtrackErrorNm() const
+  {
+    double x = sin(_courseDev * SG_RADIANS_TO_DEGREES) * _distanceM;
+    return x * SG_METER_TO_NM;
+  }
+
+  virtual double courseDeviationDeg() const
+  {
+    return _courseDev;
+  }
+
+  virtual double trueBearingDeg() const
+  {
+    // as in update(), use runway->end here, so the value remains
+    // sensible whether taking off or landing.
+    return SGGeodesy::courseDeg(_rnav->position(), _runway->end());
+  }
+  
+  virtual SGGeod position() const
+  {
+    return _runway->threshold();
+  }
+private:
+  FGRunway* _runway;
+  double _distanceM;
+  double _courseDev;
+};
+
+class ConstHdgToAltCtl : public WayptController
+{
+public:
+  ConstHdgToAltCtl(RNAV* aRNAV, const WayptRef& aWpt) :
+    WayptController(aRNAV, aWpt)
+    
+  {
+    if (_waypt->type() != "hdgToAlt") {
+      throw sg_exception("invalid waypoint type", "ConstHdgToAltCtl ctor");
+    }
+    
+    if (_waypt->altitudeRestriction() == RESTRICT_NONE) {
+      throw sg_exception("invalid waypoint alt restriction", "ConstHdgToAltCtl ctor");
+    }
+  }
+
+  virtual void init()
+  {
+    HeadingToAltitude* w = (HeadingToAltitude*) _waypt.get();
+    _targetTrack = w->headingDegMagnetic() + _rnav->magvarDeg();
+  }
+  
+  virtual void update()
+  {
+    double curAlt = _rnav->position().getElevationFt();
+    
+    switch (_waypt->altitudeRestriction()) {
+    case RESTRICT_AT: {
+      double d = curAlt - _waypt->altitudeFt();
+      if (fabs(d) < 50.0) {
+        SG_LOG(SG_GENERAL, SG_INFO, "ConstHdgToAltCtl, reached target altitude " << _waypt->altitudeFt());
+        setDone();
+      }
+    } break;
+      
+    case RESTRICT_ABOVE:
+      if (curAlt >= _waypt->altitudeFt()) {
+        SG_LOG(SG_GENERAL, SG_INFO, "ConstHdgToAltCtl, above target altitude " << _waypt->altitudeFt());
+        setDone();
+      }
+      break;
+      
+    case RESTRICT_BELOW:
+      if (curAlt <= _waypt->altitudeFt()) {
+        SG_LOG(SG_GENERAL, SG_INFO, "ConstHdgToAltCtl, below target altitude " << _waypt->altitudeFt());
+        setDone();
+      }
+      break;
+    
+    case RESTRICT_NONE:
+      assert(false);
+      break;
+    }
+  }
+  
+  virtual double timeToWaypt() const
+  {
+    double d = fabs(_rnav->position().getElevationFt() - _waypt->altitudeFt());
+    return (d / _rnav->vspeedFPM()) * 60.0; // low pass filter here, probably
+  }
+  
+  virtual double distanceToWayptM() const
+  {
+    double gsMsec = _rnav->groundSpeedKts() * KNOTS_TO_METRES_PER_SECOND;
+    return timeToWaypt() * gsMsec;
+  }
+  
+  virtual SGGeod position() const
+  {
+    SGGeod p;
+    double az2;
+    SGGeodesy::direct(_rnav->position(), _targetTrack, distanceToWayptM(), p, az2);
+    return p;
+  }
+};
+
+class InterceptCtl : public WayptController
+{
+public:
+  InterceptCtl(RNAV* aRNAV, const WayptRef& aWpt) :
+    WayptController(aRNAV, aWpt)
+    
+  {
+    if (_waypt->type() != "radialIntercept") {
+      throw sg_exception("invalid waypoint type", "InterceptCtl ctor");
+    }
+  }
+
+  virtual void init()
+  {
+    RadialIntercept* w = (RadialIntercept*) _waypt.get();
+    _trueRadial = w->radialDegMagnetic() + _rnav->magvarDeg();
+    _targetTrack = w->courseDegMagnetic() + _rnav->magvarDeg();
+  }
+  
+  virtual void update()
+  {
+    // note we want the outbound radial from the waypt, hence the ordering
+    // of arguments to courseDeg
+    double r = SGGeodesy::courseDeg(_waypt->position(), _rnav->position());
+    SG_LOG(SG_AUTOPILOT, SG_INFO, "current radial=" << r);
+    if (fabs(r - _trueRadial) < 0.5) {
+      SG_LOG(SG_GENERAL, SG_INFO, "InterceptCtl, intercepted radial " << _trueRadial);
+      setDone();
+    }
+  }
+  
+  virtual double distanceToWayptM() const
+  {
+    return SGGeodesy::distanceM(_rnav->position(), position());
+  }
+
+  virtual SGGeod position() const
+  {
+    SGGeoc c;
+    geocRadialIntersection(SGGeoc::fromGeod(_rnav->position()), _rnav->trackDeg(), 
+      SGGeoc::fromGeod(_waypt->position()), _trueRadial, c);
+    return SGGeod::fromGeoc(c);
+  }
+private:
+  double _trueRadial;
+};
+
+class DMEInterceptCtl : public WayptController
+{
+public:
+  DMEInterceptCtl(RNAV* aRNAV, const WayptRef& aWpt) :
+    WayptController(aRNAV, aWpt)
+    
+  {
+    if (_waypt->type() != "dmeIntercept") {
+      throw sg_exception("invalid waypoint type", "DMEInterceptCtl ctor");
+    }
+  }
+
+  virtual void init()
+  {
+    _dme  = (DMEIntercept*) _waypt.get();
+    _targetTrack = _dme->courseDegMagnetic() + _rnav->magvarDeg();
+  }
+  
+  virtual void update()
+  {
+    _distanceNm = SGGeodesy::distanceNm(_rnav->position(), _dme->position());
+    double d = fabs(_distanceNm - _dme->dmeDistanceNm());
+    if (d < 0.1) {
+      SG_LOG(SG_GENERAL, SG_INFO, "DMEInterceptCtl, intercepted DME " << _dme->dmeDistanceNm());
+      setDone();
+    }
+  }
+  
+  virtual double distanceToWayptM() const
+  {
+    return fabs(_distanceNm - _dme->dmeDistanceNm()) * SG_NM_TO_METER;
+  }
+  
+  virtual SGGeod position() const
+  {
+    SGGeod p;
+    double az2;
+    SGGeodesy::direct(_rnav->position(), _targetTrack, distanceToWayptM(), p, az2);
+    return p;
+  }
+
+private:
+  DMEIntercept* _dme;
+  double _distanceNm;
+};
+
+class HoldCtl : public WayptController
+{
+public:
+  HoldCtl(RNAV* aRNAV, const WayptRef& aWpt) :
+    WayptController(aRNAV, aWpt)
+    
+  {
+
+  }
+
+  virtual void init()
+  {
+  }
+  
+  virtual void update()
+  {
+    // fly inbound / outbound sides, or execute the turn
+  #if 0
+    if (inTurn) {
+    
+      targetTrack += dt * turnRateSec * turnDirection;
+      if (inbound) {
+        if .. targetTrack has passed inbound radial, doen with this turn
+      } else {
+        if target track has passed reciprocal radial done with turn
+      }
+    } else {
+      check time / distance elapsed
+      
+      if (sideDone) {
+        inTurn = true;
+        inbound = !inbound;
+        nextHeading = inbound;
+        if (!inbound) {
+          nextHeading += 180.0;
+          SG_NORMALIZE_RANGE(nextHeading, 0.0, 360.0);
+        }
+      }
+    
+    }
+  
+  #endif
+    setDone();
+  }
+  
+  virtual double distanceToWayptM() const
+  {
+    return -1.0;
+  }
+
+  virtual SGGeod position() const
+  {
+    return _waypt->position();
+  }
+};
+
+class VectorsCtl : public WayptController
+{
+public:
+  VectorsCtl(RNAV* aRNAV, const WayptRef& aWpt) :
+    WayptController(aRNAV, aWpt)
+    
+  {
+  }
+
+  virtual void init()
+  {
+ 
+  }
+  
+  virtual void update()
+  {
+    setDone();
+  }
+  
+  virtual double distanceToWayptM() const
+  {
+    return -1.0;
+  }
+  
+  virtual SGGeod position() const
+  {
+    return _waypt->position();
+  }
+
+private:
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+DirectToController::DirectToController(RNAV* aRNAV, const WayptRef& aWpt, const SGGeod& aOrigin) :
+  WayptController(aRNAV, aWpt),
+  _origin(aOrigin)
+{
+}
+
+void DirectToController::init()
+{
+  if (_waypt->flag(WPT_DYNAMIC)) {
+    throw sg_exception("can't direct-to a dynamic waypoint");
+  }
+  
+  _targetTrack = SGGeodesy::courseDeg(_origin, _waypt->position());
+}
+
+void DirectToController::update()
+{
+  double brg, az2;
+  SGGeodesy::inverse(_rnav->position(), _waypt->position(), brg, az2, _distanceM); 
+  _courseDev = brg - _targetTrack;
+  SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0);
+    
+  if ((fabs(_courseDev) > 90.0) && (_distanceM < _rnav->overflightArmDistanceM())) {
+    setDone();
+  }
+}
+
+double DirectToController::distanceToWayptM() const
+{
+  return _distanceM;
+}
+
+double DirectToController::xtrackErrorNm() const
+{
+  double x = sin(courseDeviationDeg() * SG_DEGREES_TO_RADIANS) * _distanceM;
+  return x * SG_METER_TO_NM;
+}
+
+double DirectToController::courseDeviationDeg() const
+{
+  return _courseDev;
+}
+
+double DirectToController::trueBearingDeg() const
+{
+  return SGGeodesy::courseDeg(_rnav->position(), _waypt->position());
+}
+
+SGGeod DirectToController::position() const
+{
+  return _waypt->position();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+OBSController::OBSController(RNAV* aRNAV, const WayptRef& aWpt) :
+  WayptController(aRNAV, aWpt)
+{
+}
+
+void OBSController::init()
+{
+  if (_waypt->flag(WPT_DYNAMIC)) {
+    throw sg_exception("can't use a dynamic waypoint for OBS mode");
+  }
+  
+  _targetTrack = _rnav->selectedMagCourse() + _rnav->magvarDeg();
+}
+
+void OBSController::update()
+{
+  _targetTrack = _rnav->selectedMagCourse() + _rnav->magvarDeg();
+  double brg, az2;
+  SGGeodesy::inverse(_rnav->position(), _waypt->position(), brg, az2, _distanceM); 
+  _courseDev = brg - _targetTrack;
+  SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0);
+}
+
+bool OBSController::toFlag() const
+{
+  return (fabs(_courseDev) < 90.0);
+}
+
+double OBSController::distanceToWayptM() const
+{
+  return _distanceM;
+}
+
+double OBSController::xtrackErrorNm() const
+{
+  double x = sin(_courseDev * SG_DEGREES_TO_RADIANS) * _distanceM;
+  return x * SG_METER_TO_NM;
+}
+
+double OBSController::courseDeviationDeg() const
+{
+//  if (fabs(_courseDev) > 90.0) {
+ //   double d = -_courseDev;
+ //   SG_NORMALIZE_RANGE(d, -90.0, 90.0);
+  //  return d;
+  //}
+  
+  return _courseDev;
+}
+
+double OBSController::trueBearingDeg() const
+{
+  return SGGeodesy::courseDeg(_rnav->position(), _waypt->position());
+}
+
+SGGeod OBSController::position() const
+{
+  return _waypt->position();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+WayptController* WayptController::createForWaypt(RNAV* aRNAV, const WayptRef& aWpt)
+{
+  if (!aWpt) {
+    throw sg_exception("Passed null waypt", "WayptController::createForWaypt");
+  }
+  
+  const std::string& wty(aWpt->type());
+  if (wty == "runway") {
+    return new RunwayCtl(aRNAV, aWpt);
+  }
+  
+  if (wty == "radialIntercept") {
+    return new InterceptCtl(aRNAV, aWpt);
+  }
+  
+  if (wty == "dmeIntercept") {
+    return new DMEInterceptCtl(aRNAV, aWpt);
+  }
+  
+  if (wty == "hdgToAlt") {
+    return new ConstHdgToAltCtl(aRNAV, aWpt);
+  }
+  
+  if (wty == "vectors") {
+    return new VectorsCtl(aRNAV, aWpt);
+  }
+  
+  if (wty == "hold") {
+    return new HoldCtl(aRNAV, aWpt);
+  }
+  
+  return new BasicWayptCtl(aRNAV, aWpt);
+}
+
+} // of namespace flightgear
+
diff --git a/src/Instrumentation/rnav_waypt_controller.hxx b/src/Instrumentation/rnav_waypt_controller.hxx
new file mode 100644
index 000000000..4d99c8af7
--- /dev/null
+++ b/src/Instrumentation/rnav_waypt_controller.hxx
@@ -0,0 +1,193 @@
+// rnav_waypt_controller.hxx - Waypoint-specific behaviours for RNAV systems
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifndef FG_WAYPT_CONTROLLER_HXX
+#define FG_WAYPT_CONTROLLER_HXX
+
+#include <Navaids/waypoint.hxx>
+
+namespace flightgear
+{
+
+/**
+ * Abstract RNAV interface, for devices which implement an RNAV
+ * system - INS / GPS / FMS
+ */
+class RNAV
+{
+public:
+  virtual SGGeod position() = 0;
+  
+  /**
+   * True track in degrees
+   */
+  virtual double trackDeg() = 0;
+  
+  /**
+   * Ground speed (along the track) in knots
+   */
+  virtual double groundSpeedKts() = 0;
+  
+  /**
+   * Vertical speed in ft/minute
+   */
+  virtual double vspeedFPM()= 0;
+  
+  /**
+   * Magnetic variation at current position
+   */
+  virtual double magvarDeg() = 0;
+  
+  /**
+   * device selected course (eg, from autopilot / MCP / OBS) in degrees
+   */
+  virtual double selectedMagCourse() = 0;
+
+  /**
+   * minimum distance to a waypoint for overflight sequencing. 
+   */
+  virtual double overflightArmDistanceM() = 0;
+};
+
+class WayptController
+{
+public:
+  virtual ~WayptController();
+  
+  virtual void init();
+
+  virtual void update() = 0;
+
+  /**
+   * Compute time until the waypoint is done
+   */
+  virtual double timeToWaypt() const;
+
+  /**
+   * Compute distance until the waypoint is done
+   */
+  virtual double distanceToWayptM() const = 0;
+
+  /**
+   * Bearing to the waypoint, if this value is meaningful.
+   * Default implementation returns the target track
+   */
+  virtual double trueBearingDeg() const
+    { return _targetTrack; }
+
+  virtual double targetTrackDeg() const 
+    { return _targetTrack; }
+
+  virtual double xtrackErrorNm() const
+    { return 0.0; }
+
+  virtual double courseDeviationDeg() const
+    { return 0.0; }
+
+  /**
+   * Position associated with the waypt. For static waypoints, this is
+   * simply the waypoint position itself; for dynamic points, it's the
+   * estimated location at which the controller will be done.
+   */
+  virtual SGGeod position() const = 0;
+
+  /**
+   * Is this controller finished?
+   */
+  bool isDone() const
+    { return _isDone; }
+
+  /**
+   * to/from flag - true = to, false = from. Defaults to 'true' because
+   * nearly all waypoint controllers become done as soon as this value would
+   * become false.
+   */
+  virtual bool toFlag() const
+    { return true; }
+    
+  /**
+   * Static factory method, given a waypoint, return a controller bound
+   * to it, of the appropriate type
+   */
+  static WayptController* createForWaypt(RNAV* rnav, const WayptRef& aWpt);
+protected:
+  WayptController(RNAV* aRNAV, const WayptRef& aWpt) :
+    _waypt(aWpt),
+    _rnav(aRNAV),
+    _isDone(false)
+  { }
+  
+  WayptRef _waypt;
+  double _targetTrack;
+  RNAV* _rnav;
+  
+  void setDone();
+private:
+  bool _isDone;
+};
+
+/**
+ * Controller supports 'directTo' (DTO) navigation to a waypoint. This
+ * creates a course from a starting point, to the waypoint, and reports
+ * deviation from that course.
+ *
+ * The controller is done when the waypoint is reached (to/from goes to 'from')
+ */
+class DirectToController : public WayptController
+{
+public:
+  DirectToController(RNAV* aRNAV, const WayptRef& aWpt, const SGGeod& aOrigin);
+  
+  virtual void init();
+  virtual void update();
+  virtual double distanceToWayptM() const;  
+  virtual double xtrackErrorNm() const;  
+  virtual double courseDeviationDeg() const;  
+  virtual double trueBearingDeg() const;
+  virtual SGGeod position() const;
+private:
+  SGGeod _origin;
+  double _distanceM;
+  double _courseDev;
+};
+
+/**
+ *
+ */
+class OBSController : public WayptController
+{
+public:
+  OBSController(RNAV* aRNAV, const WayptRef& aWpt);
+  
+  virtual void init();
+  virtual void update();
+  virtual double distanceToWayptM() const;  
+  virtual double xtrackErrorNm() const;  
+  virtual double courseDeviationDeg() const;  
+  virtual double trueBearingDeg() const;
+  virtual bool toFlag() const;
+  virtual SGGeod position() const;
+private:
+  double _distanceM;
+  double _courseDev;
+};
+
+} // of namespace flightgear
+
+#endif
diff --git a/src/Instrumentation/testgps.cxx b/src/Instrumentation/testgps.cxx
index cc73bded0..a35012f4b 100644
--- a/src/Instrumentation/testgps.cxx
+++ b/src/Instrumentation/testgps.cxx
@@ -1,4 +1,9 @@
 
+#include <fstream>
+
+#include <simgear/misc/sg_path.hxx>
+#include <simgear/structure/exception.hxx>
+
 #include <Main/fg_init.hxx>
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
@@ -6,8 +11,12 @@
 #include <Instrumentation/gps.hxx>
 #include <Autopilot/route_mgr.hxx>
 #include <Environment/environment_mgr.hxx>
+#include <Navaids/airways.hxx>
+#include <Navaids/waypoint.hxx>
+#include <Navaids/procedure.hxx>
 
 using std::string;
+using namespace flightgear;
 
 char *homedir = ::getenv( "HOME" );
 char *hostname = ::getenv( "HOSTNAME" );
@@ -45,6 +54,16 @@ void printScratch(SGPropertyNode* scratch)
   }
 }
 
+void printRoute(const WayptVec& aRoute)
+{
+  SG_LOG(SG_GENERAL, SG_INFO, "route size=" << aRoute.size());
+  for (unsigned int r=0; r<aRoute.size();++r) {
+    Waypt* w = aRoute[r];
+    SG_LOG(SG_GENERAL, SG_ALERT, "\t" << r << ": " << w->ident() << " "
+      << w->owner()->ident());
+  }
+}
+
 void createDummyRoute(FGRouteMgr* rm)
 {
   SGPropertyNode* rmInput = fgGetNode("/autopilot/route-manager/input", true);
@@ -59,6 +78,8 @@ void createDummyRoute(FGRouteMgr* rm)
 
 int main(int argc, char* argv[])
 {
+
+try{
   globals = new FGGlobals;
     
   fgInitFGRoot(argc, argv);
@@ -69,6 +90,9 @@ int main(int argc, char* argv[])
   
   
   fgInitNav();
+  fgSetDouble("/environment/magnetic-variation-deg", 0.0);
+  
+  Airway::load();
   
   SG_LOG(SG_GENERAL, SG_ALERT, "hello world!");
   
@@ -94,12 +118,15 @@ int main(int argc, char* argv[])
  // globals->add_subsystem("environment", envMgr);
  // envMgr->init();
   
+  fgSetBool("/sim/realism/simple-gps", true);
+  
+  // _realismSimpleGps
   
   SGPropertyNode* nd = fgGetNode("/instrumentation/gps", true);
   GPS* gps = new GPS(nd);
   globals->add_subsystem("gps", gps);
-  
-  
+
+  const FGAirport* egph = fgFindAirportID("EGPH");
   testSetPosition(egph->geod());
   
   // startup the route manager
@@ -116,6 +143,7 @@ int main(int argc, char* argv[])
   // update a few times
   gps->update(0.05);
   gps->update(0.05);
+  gps->update(0.05);
   
   scratch->setStringValue("query", "TL");
   scratch->setStringValue("type", "Vor");
@@ -221,7 +249,105 @@ int main(int argc, char* argv[])
   nd->setStringValue("command", "define-user-wpt");
   printScratch(scratch);
   
+// airways
+  FGPositioned::TypeFilter vorFilt(FGPositioned::VOR);
+  FGPositionedRef tla = FGPositioned::findClosestWithIdent("TLA", pos, &vorFilt);
+  FGPositionedRef big = FGPositioned::findClosestWithIdent("BIG", pos, &vorFilt); 
+  FGPositionedRef pol = FGPositioned::findClosestWithIdent("POL", pos, &vorFilt);
+   
+  const FGAirport* eddm = fgFindAirportID("EDDM");
+  FGPositionedRef mun = FGPositioned::findClosestWithIdent("MUN", 
+    eddm->geod(), &vorFilt);
+  
+  const FGAirport* ksfo = fgFindAirportID("KSFO");
+  FGPositionedRef sfo = FGPositioned::findClosestWithIdent("SFO", 
+    ksfo->geod(), &vorFilt);
+
+
+  WayptRef awy1 = new NavaidWaypoint(tla, NULL);
+  WayptRef awy2 = new NavaidWaypoint(big, NULL);
+  WayptRef awy3 = new NavaidWaypoint(pol, NULL);
+  WayptRef awy4 = new NavaidWaypoint(mun, NULL);
+  WayptRef awy5 = new NavaidWaypoint(sfo, NULL);
+  
+  WayptRef awy6 = new NavaidWaypoint(
+    (FGPositioned*) fgFindAirportID("KJFK"), NULL);
+  
+  SGPath p("/Users/jmt/Desktop/airways.kml");
+  std::fstream f;
+  f.open(p.str().c_str(), fstream::out | fstream::trunc);
+  
+// pre-amble
+  f << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+      "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"
+    "<Document>\n";
+
+  WayptVec route;
+  Airway::highLevel()->route(awy1, awy3, route);
+  Route::dumpRouteToLineString("egph-egcc", route, f);
+  
+  Airway::lowLevel()->route(awy1, awy2, route);
+  Route::dumpRouteToLineString("egph-big", route, f);
+  
+  Airway::lowLevel()->route(awy2, awy4, route);
+  Route::dumpRouteToLineString("big-mun", route, f);
+  
+  Airway::highLevel()->route(awy4, awy5, route);
+  Route::dumpRouteToLineString("mun-sfo", route, f);
+  
+  Airway::lowLevel()->route(awy5, awy6, route);
+  Route::dumpRouteToLineString("sfo-jfk", route, f);
+  
+  // post-amble
+  f << "</Document>\n" 
+    "</kml>" << endl;
+  f.close();
+  
+// procedures
+  SGPath op("/Users/jmt/Desktop/procedures.kml");
+  f.open(op.str().c_str(), fstream::out | fstream::trunc);
+  
+  FGAirport* eham = (FGAirport*) fgFindAirportID("EHAM");
+  FGPositioned::TypeFilter fixFilt(FGPositioned::FIX);
+  
+  WayptVec approach;
+  FGPositionedRef redfa = FGPositioned::findClosestWithIdent("REDFA", 
+    eham->geod(), &fixFilt);
+  bool ok = eham->buildApproach(new NavaidWaypoint(redfa, NULL), 
+    eham->getRunwayByIdent("18R"), approach);
+  if (!ok ) {
+    SG_LOG(SG_GENERAL, SG_INFO, "failed to build approach");
+  }
   
   
+  FGAirport* egll = (FGAirport*) fgFindAirportID("EGLL");  
+  WayptVec approach2;
+  ok = egll->buildApproach(new NavaidWaypoint(big, NULL), 
+    egll->getRunwayByIdent("27R"), approach2);
+  if (!ok ) {
+    SG_LOG(SG_GENERAL, SG_INFO, "failed to build approach");
+  }
+  
+// pre-amble
+  f << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+      "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"
+    "<Document>\n";
+    
+  Route::dumpRouteToLineString("REDFA 18R", approach, f);
+  Route::dumpRouteToLineString("EGLL 27R", approach2, f);
+  
+  // post-amble
+  f << "</Document>\n" 
+    "</kml>" << endl;
+  f.close();  
+  
+             
   return EXIT_SUCCESS;
+
+
+  
+} catch (sg_exception& ex) {
+  SG_LOG(SG_GENERAL, SG_ALERT, "exception:" << ex.getFormattedMessage());
+}
+  return EXIT_FAILURE;
 }
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index 1ebff97b1..184e5623a 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -97,6 +97,7 @@
 #include <Navaids/navlist.hxx>
 #include <Navaids/fix.hxx>
 #include <Navaids/fixlist.hxx>
+#include <Navaids/airways.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <Scripting/NasalSys.hxx>
@@ -1071,7 +1072,8 @@ fgInitNav ()
     fixlist.init( p_fix );  // adds fixes to the DB in positioned.cxx
 
     SG_LOG(SG_GENERAL, SG_INFO, "  Airways");
-    SGPath p_awy( globals->get_fg_root() );
+ #if 0 
+      SGPath p_awy( globals->get_fg_root() );
     p_awy.append( "Navaids/awy.dat" );
     FGAirwayNetwork *awyNet = new FGAirwayNetwork;
     //cerr << "Loading Airways" << endl;
@@ -1079,7 +1081,9 @@ fgInitNav ()
     awyNet->init();
     //cerr << "initializing airways" << endl;
     globals->set_airwaynet( awyNet );
-
+#endif
+    flightgear::Airway::load();
+    
     return true;
 }
 
diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am
index a1f38ed14..66c650045 100644
--- a/src/Navaids/Makefile.am
+++ b/src/Navaids/Makefile.am
@@ -5,11 +5,15 @@ noinst_LIBRARIES = libNavaids.a
 libNavaids_a_SOURCES = \
 	navdb.hxx navdb.cxx \
 	fix.hxx fixlist.hxx fixlist.cxx \
-	awynet.hxx awynet.cxx \
 	navrecord.hxx navrecord.cxx \
 	navlist.hxx navlist.cxx \
 	positioned.hxx positioned.cxx \
-	markerbeacon.hxx markerbeacon.cxx
+	markerbeacon.hxx markerbeacon.cxx \
+	routePath.hxx routePath.cxx \
+	airways.hxx airways.cxx \
+	route.hxx route.cxx \
+	waypoint.hxx waypoint.cxx \
+	procedure.hxx procedure.cxx \
 
 #
 # testnavs_SOURCES = testnavs.cxx
diff --git a/src/Navaids/airways.cxx b/src/Navaids/airways.cxx
new file mode 100644
index 000000000..5bdbb2bee
--- /dev/null
+++ b/src/Navaids/airways.cxx
@@ -0,0 +1,454 @@
+// airways.cxx - storage of airways network, and routing between nodes
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifndef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "airways.hxx"
+
+#include <algorithm>
+#include <set>
+
+#include <simgear/sg_inlines.h>
+#include <simgear/structure/exception.hxx>
+#include <simgear/misc/sgstream.hxx>
+#include <simgear/misc/sg_path.hxx>
+
+#include <boost/tuple/tuple.hpp>
+
+#include <Main/globals.hxx>
+#include <Navaids/positioned.hxx>
+#include <Navaids/waypoint.hxx>
+
+using std::make_pair;
+using std::string;
+using std::set;
+using std::vector;
+
+#define DEBUG_AWY_SEARCH 1
+
+namespace flightgear
+{
+
+Airway::Network* Airway::static_lowLevel = NULL;
+Airway::Network* Airway::static_highLevel = NULL;
+
+//////////////////////////////////////////////////////////////////////////////
+
+/**
+ * information about an edge in the network.
+ * Some of this information is computed lazily
+ */
+class AdjacentWaypoint 
+{
+public:
+  AdjacentWaypoint(const FGPositionedRef& aOrigin,
+    const FGPositionedRef& aDest, Airway* aWay); 
+
+  double distanceM() const;
+  
+  const FGPositionedRef& other(const FGPositionedRef& aEnd) const;
+  
+  const FGPositionedRef origin;
+  const FGPositionedRef destination;
+  const Airway* airway;
+  
+private:
+  void validate() const;
+  mutable double _distanceM;
+};
+
+class AStarOpenNode : public SGReferenced
+{
+public:
+  AStarOpenNode(FGPositionedRef aNode, double aLegDist, 
+    Airway* aAirway,
+    FGPositionedRef aDest, AStarOpenNode* aPrev) :
+    node(aNode),
+    airway(aAirway),
+    previous(aPrev)
+  { 
+    distanceFromStart = aLegDist;
+    if (previous) {
+      distanceFromStart +=  previous->distanceFromStart;
+    }
+    
+		directDistanceToDestination = SGGeodesy::distanceM(node->geod(), aDest->geod());
+  }
+  
+  virtual ~AStarOpenNode()
+  {
+  }
+  
+  FGPositionedRef node;
+  Airway* airway;
+  SGSharedPtr<AStarOpenNode> previous;
+  double distanceFromStart; // aka 'g(x)'
+  double directDistanceToDestination; // aka 'h(x)'
+  
+  /**
+	 * aka 'f(x)'
+	 */
+	double totalCost() const {
+		return distanceFromStart + directDistanceToDestination;
+	}
+};
+
+typedef SGSharedPtr<AStarOpenNode> AStarOpenNodeRef;
+
+////////////////////////////////////////////////////////////////////////////
+
+Airway::Network* Airway::lowLevel()
+{
+  return static_lowLevel;
+}
+
+Airway::Network* Airway::highLevel()
+{
+  return static_highLevel;
+}
+
+Airway::Airway(const std::string& aIdent, double aTop, double aBottom) :
+  _ident(aIdent),
+  _topAltitudeFt(aTop),
+  _bottomAltitudeFt(aBottom)
+{
+}
+
+void Airway::load()
+{
+  static_lowLevel = new Network;
+  static_highLevel = new Network;
+
+  SGPath path( globals->get_fg_root() );
+  path.append( "Navaids/awy.dat" );
+    
+  std::string identStart, identEnd, name;
+  double latStart, lonStart, latEnd, lonEnd;
+  int type, base, top;
+  //int airwayIndex = 0;
+  //FGNode *n;
+
+  sg_gzifstream in( path.str() );
+  if ( !in.is_open() ) {
+    SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << path.str() );
+    throw sg_io_exception("Could not open airways data", sg_location(path.str()));
+  }
+// toss the first two lines of the file
+  in >> skipeol;
+  in >> skipeol;
+
+// read in each remaining line of the file
+  while (!in.eof()) {
+    in >> identStart;
+
+    if (identStart == "99") {
+      break;
+    }
+    
+    in >> latStart >> lonStart >> identEnd >> latEnd >> lonEnd >> type >> base >> top >> name;
+    in >> skipeol;
+
+    // type = 1; low-altitude
+    // type = 2; high-altitude
+    Network* net = (type == 1) ? static_lowLevel : static_highLevel;
+  
+    SGGeod startPos(SGGeod::fromDeg(lonStart, latStart)),
+      endPos(SGGeod::fromDeg(lonEnd, latEnd));
+    
+    Airway* awy = net->findAirway(name, top, base);
+    net->addEdge(awy, startPos, identStart, endPos, identEnd);
+  } // of file line iteration
+}
+
+Airway* Airway::Network::findAirway(const std::string& aName, double aTop, double aBase)
+{
+  AirwayDict::iterator it = _airways.find(aName);
+  if (it == _airways.end()) {
+    Airway* awy = new Airway(aName, aTop, aBase);
+    it = _airways.insert(it, make_pair(aName, awy));
+  }
+  
+  return it->second;
+}
+
+void Airway::Network::addEdge(Airway* aWay, const SGGeod& aStartPos, 
+  const std::string& aStartIdent, 
+  const SGGeod& aEndPos, const std::string& aEndIdent)
+{
+  FGPositionedRef start = FGPositioned::findClosestWithIdent(aStartIdent, aStartPos);
+  FGPositionedRef end = FGPositioned::findClosestWithIdent(aEndIdent, aEndPos);
+    
+  if (!start) {
+    SG_LOG(SG_GENERAL, SG_INFO, "unknown airways start pt: '" << aStartIdent << "'");
+    start = FGPositioned::createUserWaypoint(aStartIdent, aStartPos);
+    return;
+  }
+  
+  if (!end) {
+    SG_LOG(SG_GENERAL, SG_INFO, "unknown airways end pt: '" << aEndIdent << "'");
+    end = FGPositioned::createUserWaypoint(aEndIdent, aEndPos);
+    return;
+  }
+  
+  AdjacentWaypoint* edge = new AdjacentWaypoint(start, end, aWay);
+  _graph.insert(make_pair(start, edge));
+  _graph.insert(make_pair(end, edge));
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+bool Airway::Network::inNetwork(const FGPositioned* aPos) const
+{
+  FGPositioned* pos = const_cast<FGPositioned*>(aPos);
+  return (_graph.find(pos) != _graph.end());
+}
+
+bool Airway::Network::route(WayptRef aFrom, WayptRef aTo, 
+  WayptVec& aPath)
+{
+  if (!aFrom || !aTo) {
+    throw sg_exception("invalid waypoints to route between");
+  }
+  
+// find closest nodes on the graph to from/to
+// if argument waypoints are directly on the graph (which is frequently the
+// case), note this so we don't duplicate them in the output.
+
+  FGPositionedRef from, to;
+  bool exactTo, exactFrom;
+  boost::tie(from, exactFrom) = findClosestNode(aFrom);
+  boost::tie(to, exactTo) = findClosestNode(aTo);
+  
+#ifdef DEBUG_AWY_SEARCH
+  SG_LOG(SG_GENERAL, SG_INFO, "from:" << from->ident() << "/" << from->name());
+  SG_LOG(SG_GENERAL, SG_INFO, "to:" << to->ident() << "/" << to->name());
+#endif
+
+  bool ok = search2(from, to, aPath);
+  if (!ok) {
+    return false;
+  }
+  
+  if (exactTo) {
+    aPath.pop_back();
+  }
+  
+  if (exactFrom) {
+    // edge case - if from and to are equal, which can happen, don't
+    // crash here. This happens routing EGPH -> EGCC; 'DCS' is common
+    // to the EGPH departure and EGCC STAR.
+    if (!aPath.empty()) {
+      aPath.erase(aPath.begin());
+    }
+  }
+  
+  return true;
+}
+
+std::pair<FGPositionedRef, bool> 
+Airway::Network::findClosestNode(WayptRef aRef)
+{
+  return findClosestNode(aRef->position());
+}
+
+class InAirwayFilter : public FGPositioned::Filter
+{
+public:
+  InAirwayFilter(Airway::Network* aNet) :
+    _net(aNet)
+  { ; }
+  
+  virtual bool pass(FGPositioned* aPos) const
+  {
+    return _net->inNetwork(aPos);
+  }
+  
+  virtual FGPositioned::Type minType() const
+  { return FGPositioned::WAYPOINT; }
+  
+  virtual FGPositioned::Type maxType() const
+  { return FGPositioned::NDB; }
+  
+private:
+  Airway::Network* _net;
+};
+
+std::pair<FGPositionedRef, bool> 
+Airway::Network::findClosestNode(const SGGeod& aGeod)
+{
+  InAirwayFilter f(this);
+  FGPositionedRef r = FGPositioned::findClosest(aGeod, 800.0, &f);
+  bool exact = false;
+  
+  if (r && (SGGeodesy::distanceM(aGeod, r->geod()) < 100.0)) {
+    exact = true; // within 100 metres, let's call that exact
+  }
+  
+  return make_pair(r, exact);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+typedef vector<AStarOpenNodeRef> OpenNodeHeap;
+
+static void buildWaypoints(AStarOpenNodeRef aNode, WayptVec& aRoute)
+{
+// count the route length, and hence pre-size aRoute
+  int count = 0;
+  AStarOpenNodeRef n = aNode;
+  for (; n != NULL; ++count, n = n->previous) {;}
+  aRoute.resize(count);
+  
+// run over the route, creating waypoints
+  for (n = aNode; n; n=n->previous) {
+    aRoute[--count] = new NavaidWaypoint(n->node, n->airway);
+  }
+}
+
+/**
+ * Inefficent (linear) helper to find an open node in the heap
+ */
+static AStarOpenNodeRef
+findInOpen(const OpenNodeHeap& aHeap, FGPositioned* aPos)
+{
+  for (unsigned int i=0; i<aHeap.size(); ++i) {
+    if (aHeap[i]->node == aPos) {
+      return aHeap[i];
+    }
+  }
+  
+  return NULL;
+}
+
+class HeapOrder
+{
+public:
+  bool operator()(AStarOpenNode* a, AStarOpenNode* b)
+  {
+    return a->totalCost() > b->totalCost();
+  }
+};
+
+bool Airway::Network::search2(FGPositionedRef aStart, FGPositionedRef aDest,
+  WayptVec& aRoute)
+{
+  
+  typedef set<FGPositioned*> ClosedNodeSet;
+  typedef std::pair<AdjacencyMap::iterator,AdjacencyMap::iterator> AdjacencyMapRange;
+  
+  OpenNodeHeap openNodes;
+  ClosedNodeSet closedNodes;
+  HeapOrder ordering;
+  
+  openNodes.push_back(new AStarOpenNode(aStart, 0.0, NULL, aDest, NULL));
+  
+// A* open node iteration
+  while (!openNodes.empty()) {
+    std::pop_heap(openNodes.begin(), openNodes.end(), ordering);
+    AStarOpenNodeRef x = openNodes.back();
+    FGPositioned* xp = x->node;    
+    openNodes.pop_back();
+    closedNodes.insert(xp);
+    
+  //  SG_LOG(SG_GENERAL, SG_INFO, "x:" << xp->ident() << ", f(x)=" << x->totalCost());
+    
+  // check if xp is the goal; if so we're done, since there cannot be an open
+  // node with lower f(x) value.
+    if (xp == aDest) {
+      buildWaypoints(x, aRoute);
+      return true;
+    }
+    
+  // adjacent (neighbour) iteration
+    AdjacencyMapRange r(_graph.equal_range(xp));
+    for (; r.first != r.second; ++r.first) {
+      AdjacentWaypoint* adj(r.first->second);
+      FGPositioned* yp = adj->other(xp);
+      if (closedNodes.count(yp)) {
+        continue; // closed, ignore
+      }
+
+      AStarOpenNodeRef y = findInOpen(openNodes, yp);
+      if (y) { // already open
+        double g = x->distanceFromStart + adj->distanceM();
+        if (g > y->distanceFromStart) {
+          // worse path, ignore
+          //SG_LOG(SG_GENERAL, SG_INFO, "\tabandoning " << yp->ident() <<
+          // " path is worse: g(y)" << y->distanceFromStart << ", g'=" << g);
+          continue;
+        }
+        
+      // we need to update y. Unfortunately this means rebuilding the heap,
+      // since y's score can change arbitrarily
+        //SG_LOG(SG_GENERAL, SG_INFO, "\tfixing up previous for new path to " << yp->ident() << ", d =" << g);
+        y->previous = x;
+        y->distanceFromStart = g;
+        y->airway = (Airway*) adj->airway;
+        std::make_heap(openNodes.begin(), openNodes.end(), ordering);
+      } else { // not open, insert a new node for y into the heap
+        y = new AStarOpenNode(yp, adj->distanceM(), 
+          (Airway*) adj->airway, aDest, x);
+        //SG_LOG(SG_GENERAL, SG_INFO, "\ty=" << yp->ident() << ", f(y)=" << y->totalCost());
+        openNodes.push_back(y);
+        std::push_heap(openNodes.begin(), openNodes.end(), ordering);
+      }
+    } // of neighbour iteration
+  } // of open node iteration
+  
+  SG_LOG(SG_GENERAL, SG_INFO, "A* failed to find route");
+  return false;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// AdjacentWaypoint definitions 
+
+AdjacentWaypoint::AdjacentWaypoint(
+  const FGPositionedRef& aOrigin, const FGPositionedRef& aDest, Airway* aWay) :
+  origin(aOrigin),
+  destination(aDest), 
+  airway(aWay),
+  _distanceM(-1.0)
+{
+
+}
+
+const FGPositionedRef&
+AdjacentWaypoint::other(const FGPositionedRef& aEnd) const
+{
+  return (aEnd == origin) ? destination : origin;
+}
+
+double AdjacentWaypoint::distanceM() const
+{
+  validate();
+  return _distanceM;
+}
+      
+void AdjacentWaypoint::validate() const
+{
+  if (_distanceM > 0.0) {
+    return; // already validated
+  }
+  
+  _distanceM = SGGeodesy::distanceM(origin->geod(), destination->geod());
+}
+
+} // of namespace flightgear
diff --git a/src/Navaids/airways.hxx b/src/Navaids/airways.hxx
new file mode 100644
index 000000000..f29ecbb20
--- /dev/null
+++ b/src/Navaids/airways.hxx
@@ -0,0 +1,134 @@
+// airways.hxx - storage of airways network, and routing between nodes
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifndef FG_AIRWAYS_HXX
+#define FG_AIRWAYS_HXX
+
+#include <map>
+#include <vector>
+
+#include <Navaids/route.hxx>
+
+class FGPositioned;
+typedef SGSharedPtr<FGPositioned> FGPositionedRef; 
+
+namespace flightgear {
+
+// forward declare some helpers
+struct SearchContext;
+class AdjacentWaypoint;
+class InAirwayFilter;
+
+class Airway : public Route
+{
+public:
+  virtual std::string ident() const
+  { return _ident; }
+  
+  static void load();
+  
+  /**
+   * Track a network of airways
+   *
+   */
+  class Network
+  {
+  public:
+    friend class Airway;
+    friend class InAirwayFilter;
+    
+    
+  
+    /**
+     * Principal routing algorithm. Attempts to find the best route beween
+     * two points. If either point is part of the airway network (e.g, a SID
+     * or STAR transition), it will <em>not</em> be duplicated in the result
+     * path.
+     *
+     * Returns true if a route could be found, or false otherwise.
+     */
+    bool route(WayptRef aFrom, WayptRef aTo, WayptVec& aPath);
+  private:    
+    void addEdge(Airway* aWay, const SGGeod& aStartPos, 
+                const std::string& aStartIdent, 
+                const SGGeod& aEndPos, const std::string& aEndIdent);
+  
+    Airway* findAirway(const std::string& aName, double aTop, double aBase);
+    
+    typedef std::multimap<FGPositioned*, AdjacentWaypoint*> AdjacencyMap;
+    AdjacencyMap _graph;
+    
+    typedef std::vector<AdjacentWaypoint*> AdjacentWaypointVec;
+
+    typedef std::map<std::string, Airway*> AirwayDict;
+    AirwayDict _airways;
+
+    bool search2(FGPositionedRef aStart, FGPositionedRef aDest, WayptVec& aRoute);
+  
+    /**
+     * Test if a positioned item is part of this airway network or not.
+     */
+    bool inNetwork(const FGPositioned* aRef) const;
+    
+    /**
+     * Find the closest node on the network, to the specified waypoint
+     *
+     * May return NULL,false if no match could be found; the search is
+     * internally limited to avoid very poor performance; for example, 
+     * in the middle of an ocean.
+     *
+     * The second return value indicates if the returned value is
+     * equal (true) or distinct (false) to the input waypoint.
+     * Equality here means being physically within a close tolerance,
+     * on the order of a hundred metres.
+     */
+    std::pair<FGPositionedRef, bool> findClosestNode(WayptRef aRef);
+    
+    /**
+     * Overloaded version working with a raw SGGeod
+     */
+    std::pair<FGPositionedRef, bool> findClosestNode(const SGGeod& aGeod);
+  };
+
+
+  static Network* highLevel();
+  static Network* lowLevel();
+  
+private:
+  Airway(const std::string& aIdent, double aTop, double aBottom);
+
+  friend class Network;
+  
+  static Network* static_highLevel;
+  static Network* static_lowLevel;
+  
+  std::string _ident;
+  double _topAltitudeFt;
+  double _bottomAltitudeFt;
+
+  // high-level vs low-level flag
+  // ... ?
+  
+  WayptVec _elements;
+};
+
+} // of namespace flightgear
+
+
+#endif //of FG_AIRWAYS_HXX
diff --git a/src/Navaids/positioned.cxx b/src/Navaids/positioned.cxx
index 917156877..fcf5ec848 100644
--- a/src/Navaids/positioned.cxx
+++ b/src/Navaids/positioned.cxx
@@ -518,7 +518,9 @@ FGPositioned::Filter::passType(Type aTy) const
 
 static FGPositioned::List 
 findAll(const NamedPositionedIndex& aIndex, 
-                             const std::string& aName, FGPositioned::Filter* aFilter)
+                             const std::string& aName,
+                             FGPositioned::Filter* aFilter,
+                             bool aExact)
 {
   FGPositioned::List result;
   if (aName.empty()) {
@@ -526,9 +528,16 @@ findAll(const NamedPositionedIndex& aIndex,
   }
   
   std::string name = boost::to_upper_copy(aName);
-  std::string upperBoundId = name;
-  upperBoundId[upperBoundId.size()-1]++;
-  NamedPositionedIndex::const_iterator upperBound = aIndex.lower_bound(upperBoundId);
+  NamedPositionedIndex::const_iterator upperBound;
+  
+  if (aExact) {
+    upperBound = aIndex.upper_bound(name);
+  } else {
+    std::string upperBoundId = name;
+    upperBoundId[upperBoundId.size()-1]++;
+    upperBound = aIndex.lower_bound(upperBoundId);
+  }
+  
   NamedPositionedIndex::const_iterator it = aIndex.lower_bound(name);
   
   for (; it != upperBound; ++it) {
@@ -663,7 +672,7 @@ const char* FGPositioned::nameForType(Type aTy)
 FGPositionedRef
 FGPositioned::findClosestWithIdent(const std::string& aIdent, const SGGeod& aPos, Filter* aFilter)
 {
-  FGPositioned::List r(findAll(global_identIndex, aIdent, aFilter));
+  FGPositioned::List r(findAll(global_identIndex, aIdent, aFilter, true));
   if (r.empty()) {
     return FGPositionedRef();
   }
@@ -682,15 +691,15 @@ FGPositioned::findWithinRange(const SGGeod& aPos, double aRangeNm, Filter* aFilt
 }
 
 FGPositioned::List
-FGPositioned::findAllWithIdent(const std::string& aIdent, Filter* aFilter)
+FGPositioned::findAllWithIdent(const std::string& aIdent, Filter* aFilter, bool aExact)
 {
-  return findAll(global_identIndex, aIdent, aFilter);
+  return findAll(global_identIndex, aIdent, aFilter, aExact);
 }
 
 FGPositioned::List
-FGPositioned::findAllWithName(const std::string& aName, Filter* aFilter)
+FGPositioned::findAllWithName(const std::string& aName, Filter* aFilter, bool aExact)
 {
-  return findAll(global_nameIndex, aName, aFilter);
+  return findAll(global_nameIndex, aName, aFilter, aExact);
 }
 
 FGPositionedRef
diff --git a/src/Navaids/positioned.hxx b/src/Navaids/positioned.hxx
index 27d807a72..f6f61229a 100644
--- a/src/Navaids/positioned.hxx
+++ b/src/Navaids/positioned.hxx
@@ -43,6 +43,7 @@ public:
     TAXIWAY,
     PAVEMENT,
     PARK_STAND,
+    WAYPOINT,
     FIX,
     VOR,
     NDB,
@@ -55,7 +56,6 @@ public:
     DME,
     TACAN,
     OBSTACLE,
-    WAYPOINT, // user-defined waypoint
     FREQ_GND,
     FREQ_TWR,
     FREQ_ATIS,
@@ -160,12 +160,12 @@ public:
    * Find all items with the specified ident
    * @param aFilter - optional filter on items
    */
-  static List findAllWithIdent(const std::string& aIdent, Filter* aFilter = NULL);
+  static List findAllWithIdent(const std::string& aIdent, Filter* aFilter = NULL, bool aExact = true);
   
   /**
    * As above, but searches names instead of idents
    */
-  static List findAllWithName(const std::string& aName, Filter* aFilter = NULL);
+  static List findAllWithName(const std::string& aName, Filter* aFilter = NULL, bool aExact = true);
   
   /**
    * Sort an FGPositionedList by distance from a position
diff --git a/src/Navaids/procedure.cxx b/src/Navaids/procedure.cxx
new file mode 100644
index 000000000..4080f0a75
--- /dev/null
+++ b/src/Navaids/procedure.cxx
@@ -0,0 +1,333 @@
+// procedure.cxx - define route storing an approach, arrival or departure procedure
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#include "procedure.hxx"
+
+#include <simgear/structure/exception.hxx>
+
+#include <Navaids/waypoint.hxx>
+
+using std::string;
+
+namespace flightgear
+{
+
+Procedure::Procedure(const string& aIdent) :
+  _ident(aIdent)
+{
+}
+
+Approach::Approach(const string& aIdent) : 
+  Procedure(aIdent)
+{
+
+}
+
+void Approach::setRunway(FGRunwayRef aRwy)
+{
+  _runway = aRwy;
+}
+
+void Approach::setPrimaryAndMissed(const WayptVec& aPrimary, const WayptVec& aMissed)
+{
+  _primary = aPrimary;
+  _primary[0]->setFlag(WPT_IAF, true);
+  _primary[_primary.size()-1]->setFlag(WPT_FAF, true);
+  
+  _missed = aMissed;
+  
+  if (!_missed.empty()) {
+    // mark the first point as the published missed-approach point
+    _missed[0]->setFlag(WPT_MAP, true);
+  
+    // mark all the points as being on the missed approach route
+    for (unsigned int i=0; i<_missed.size(); ++i) {
+      _missed[i]->setFlag(WPT_MISS, true);
+    }
+  }
+}
+
+void Approach::addTransition(Transition* aTrans)
+{
+  WayptRef entry = aTrans->enroute();
+  _transitions[entry] = aTrans;
+}
+
+bool Approach::route(WayptRef aIAF, WayptVec& aWps)
+{
+  WptTransitionMap::iterator it;
+  bool haveTrans = false;
+  for (it = _transitions.begin(); it != _transitions.end(); ++it) {
+    Transition* t= it->second;
+    if (t->route(aIAF, aWps)) {
+    haveTrans = true;
+      break;
+    }
+  } // of transitions iteration
+  
+  if (!haveTrans) {
+    SG_LOG(SG_GENERAL, SG_INFO, "approach " << ident() << " has no transition " <<
+      "for IAF: " << aIAF->ident());
+    return false;
+  }
+  
+  aWps.insert(aWps.end(), _primary.begin(), _primary.end());
+  aWps.push_back(new RunwayWaypt(_runway, NULL));
+  aWps.insert(aWps.end(), _missed.begin(), _missed.end());
+  return true;
+}
+
+bool Approach::routeFromVectors(WayptVec& aWps)
+{
+  aWps.insert(aWps.end(), _primary.begin(), _primary.end());
+  aWps.push_back(new RunwayWaypt(_runway, NULL));
+  aWps.insert(aWps.end(), _missed.begin(), _missed.end());
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+ArrivalDeparture::ArrivalDeparture(const string& aIdent) :
+    Procedure(aIdent)
+{
+}
+
+void ArrivalDeparture::addRunway(FGRunwayRef aWay)
+{
+  _runways[aWay] = NULL;
+}
+
+bool ArrivalDeparture::isForRunway(FGRunwayRef aWay) const
+{
+  // null runway always passes
+  if (!aWay) {
+    return true;
+  }
+  
+  return (_runways.count(aWay));
+}
+
+void ArrivalDeparture::addTransition(Transition* aTrans)
+{
+  WayptRef entry = aTrans->enroute();
+  _enrouteTransitions[entry] = aTrans;
+}
+
+void ArrivalDeparture::addRunwayTransition(FGRunwayRef aWay, Transition* aTrans)
+{
+  assert(aWay->ident() == aTrans->ident());
+  if (!isForRunway(aWay)) {
+    throw sg_io_exception("adding transition for unspecified runway:" + aWay->ident(), ident());
+  }
+  
+  _runways[aWay] = aTrans;
+}
+
+void ArrivalDeparture::setCommon(const WayptVec& aWps)
+{
+  _common = aWps;
+}
+
+bool ArrivalDeparture::commonRoute(Waypt* aEnroute, WayptVec& aPath, FGRunwayRef aRwy)
+{
+  // assume we're routing from enroute, to the runway.
+  // for departures, we'll flip the result points
+
+  Transition* t = findTransitionByEnroute(aEnroute);
+  WayptVec::iterator firstCommon = _common.begin();
+  if (t) {
+    t->route(aEnroute, aPath);
+
+    Waypt* transEnd = t->procedureEnd();
+    for (; firstCommon != _common.end(); ++firstCommon) {
+      if ((*firstCommon)->matches(transEnd)) {
+        // found transition->common point, stop search
+        break;
+      }
+    } // of common points
+    
+    // if we hit this point, the transition doesn't end (start, for a SID) on
+    // a common point. We assume this means we should just append the entire
+    // common section after the transition.
+    firstCommon = _common.begin();
+  } else {
+    if (aEnroute && !(*firstCommon)->matches(aEnroute)) {
+      return false;
+    }
+  } // of not using a transition
+  
+  // append (some) common points
+  aPath.insert(aPath.end(), firstCommon, _common.end());
+  
+  if (!aRwy) {
+    // no runway specified, we're done
+    return true;
+  }
+  
+  RunwayTransitionMap::iterator r = _runways.find(aRwy);
+  assert(r != _runways.end());
+  if (!r->second) {
+    // no transitions specified. Not great, but not
+    // much we can do about it. Calling code will insert VECTORS to the approach
+    // if required, or maybe there's an approach transition defined.
+    return true;
+  }
+  
+  SG_LOG(SG_GENERAL, SG_INFO, ident() << " using runway transition for " << r->first->ident());
+  r->second->route(NULL, aPath);
+  return true;
+}
+
+Transition* ArrivalDeparture::findTransitionByEnroute(Waypt* aEnroute) const
+{
+  if (!aEnroute) {
+    return NULL;
+  }
+  
+  WptTransitionMap::const_iterator eit;
+  for (eit = _enrouteTransitions.begin(); eit != _enrouteTransitions.end(); ++eit) {
+    if (eit->second->enroute()->matches(aEnroute)) {
+      SG_LOG(SG_GENERAL, SG_INFO, ident() << " using enroute transition " << eit->second->ident());
+      return eit->second;
+    }
+  } // of enroute transition iteration
+  
+  return NULL;
+}
+
+WayptRef ArrivalDeparture::findBestTransition(const SGGeod& aPos) const
+{
+  // no transitions, that's easy
+  if (_enrouteTransitions.empty()) {
+    SG_LOG(SG_GENERAL, SG_INFO, "no enroute transitions for " << ident());
+    return _common.front();
+  }
+  
+  double d = 1e9;
+  WayptRef w;
+  WptTransitionMap::const_iterator eit;
+  for (eit = _enrouteTransitions.begin(); eit != _enrouteTransitions.end(); ++eit) {
+    WayptRef c = eit->second->enroute();
+    SG_LOG(SG_GENERAL, SG_INFO, "findBestTransition for " << ident() << ", looking at " << c->ident());
+    // assert(c->hasFixedPosition());
+    double cd = SGGeodesy::distanceM(aPos, c->position());
+    
+    if (cd < d) { // distance to 'c' is less, new best match
+      d = cd;
+      w = c;
+    }
+  } // of transitions iteration
+  
+  assert(w);
+  return w;
+}
+
+WayptRef ArrivalDeparture::findTransitionByName(const string& aIdent) const
+{
+  WptTransitionMap::const_iterator eit;
+  for (eit = _enrouteTransitions.begin(); eit != _enrouteTransitions.end(); ++eit) {
+    WayptRef c = eit->second->enroute();
+    if (c->ident() == aIdent) {
+      return c;
+    }
+  }
+  
+  return NULL;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
+SID::SID(const string& aIdent) :
+    ArrivalDeparture(aIdent)
+{
+}
+
+bool SID::route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath)
+{
+  if (!isForRunway(aWay)) {
+    SG_LOG(SG_GENERAL, SG_WARN, "SID " << ident() << " not for runway " << aWay->ident());
+    return false;
+  }
+  
+  WayptVec path;
+  if (!commonRoute(aEnroute, path, aWay)) {
+    return false;
+  }
+  
+  // SID waypoints (including transitions) are stored reversed, so we can
+  // re-use the routing code. This is where we fix the ordering for client code
+  std::back_insert_iterator<WayptVec> bi(aPath);
+  std::reverse_copy(path.begin(), path.end(), bi);
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
+STAR::STAR(const string& aIdent) :
+    ArrivalDeparture(aIdent)
+{
+}
+
+bool STAR::route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath)
+{
+  if (aWay && !isForRunway(aWay)) {
+    return false;
+  }
+    
+  return commonRoute(aEnroute, aPath, aWay);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+Transition::Transition(const std::string& aIdent, Procedure* aPr, 
+    const WayptVec& aWps) :
+  _ident(aIdent),
+  _parent(aPr),
+  _primary(aWps)
+{
+  assert(aPr);
+  assert(!_primary.empty());
+  
+  _primary[0]->setFlag(WPT_TRANSITION, true);
+}
+
+WayptRef Transition::enroute() const
+{
+  assert(!_primary.empty());
+  return _primary[0];
+}
+
+WayptRef Transition::procedureEnd() const
+{
+  assert(!_primary.empty());
+  return _primary[_primary.size() - 1];
+}
+
+bool Transition::route(Waypt* aEnroute, WayptVec& aPath)
+{
+  if (aEnroute && !enroute()->matches(aEnroute)) {
+    return false;
+  }
+  
+  aPath.insert(aPath.end(), _primary.begin(), _primary.end());
+  return true;
+}
+
+} // of namespace
diff --git a/src/Navaids/procedure.hxx b/src/Navaids/procedure.hxx
new file mode 100644
index 000000000..13df69036
--- /dev/null
+++ b/src/Navaids/procedure.hxx
@@ -0,0 +1,212 @@
+/// procedure.hxx - define route storing an approach, arrival or departure procedure
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifndef FG_NAVAID_PROCEDURE_HXX
+#define FG_NAVAID_PROCEDURE_HXX
+
+#include <set>
+
+#include <Navaids/route.hxx>
+#include <Airports/runways.hxx>
+
+typedef SGSharedPtr<FGRunway> FGRunwayRef;
+
+namespace flightgear {
+
+// forward decls
+class NavdataVisitor;
+
+class Procedure : public Route
+{
+public:
+
+  virtual std::string ident() const
+  { return _ident; }
+protected:
+  Procedure(const std::string& aIdent);
+  
+  std::string _ident;
+};
+
+/**
+ * Encapsulate a transition segment
+ */
+class Transition : public Route
+{
+public:
+  bool route(Waypt* aEnroute, WayptVec& aPath);
+  
+  Procedure* parent() const
+  { return _parent; }
+  
+  /**
+   * Return the enroute end of the transition
+   */
+  WayptRef enroute() const;
+  
+  /**
+   * Return the procedure end of the transition
+   */
+  WayptRef procedureEnd() const;
+  
+  virtual std::string ident() const
+  { return _ident; }
+private:
+  friend class NavdataVisitor;
+
+  Transition(const std::string& aIdent, Procedure* aPr, const WayptVec& aWps);
+
+  std::string _ident;
+  Procedure* _parent;
+  WayptVec _primary;
+};
+
+/**
+ * Describe an approach procedure, including the missed approach
+ * segment
+ */
+class Approach : public Procedure
+{
+public:
+  FGRunwayRef runway() 
+  { return _runway; }
+
+  /**
+   * Build a route from a valid IAF to the runway, including the missed
+   * segment. Return false if no valid transition from the specified IAF
+   * could be found
+   */
+  bool route(WayptRef aIAF, WayptVec& aWps);
+
+  /**
+   * Build route as above, but ignore transitions, and assume radar
+   * vectoring to the start of main approach
+   */
+  bool routeFromVectors(WayptVec& aWps);
+  
+  const WayptVec& primary() const
+    { return _primary; }
+    
+  const WayptVec& missed() const
+    { return _missed; }
+
+private:
+  friend class NavdataVisitor;
+  
+  Approach(const std::string& aIdent);
+  
+  void setRunway(FGRunwayRef aRwy);
+  void setPrimaryAndMissed(const WayptVec& aPrimary, const WayptVec& aMissed);
+  void addTransition(Transition* aTrans);
+  
+  FGRunwayRef _runway;
+  
+  typedef std::map<WayptRef, Transition*> WptTransitionMap;
+  WptTransitionMap _transitions;
+  
+  WayptVec _primary; // unify these?
+  WayptVec _missed;
+};
+
+class ArrivalDeparture : public Procedure
+{
+public:
+  /**
+   * Predicate, test if this procedure applies to the requested runway
+   */
+  virtual bool isForRunway(FGRunwayRef aWay) const;
+
+  /**
+   * Find a path between the runway and enroute structure. Waypoints 
+   * corresponding to the appropriate transitions and segments will be created.
+   */
+  virtual bool route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath) = 0;
+
+  const WayptVec& common() const
+    { return _common; }
+
+  /**
+   * Given an enroute location, find the best enroute transition point for 
+   * this arrival/departure. Best is currently determined as 'closest to the
+   * enroute location'.
+   */
+  WayptRef findBestTransition(const SGGeod& aPos) const;
+  
+  /**
+   * Find an enroute transition waypoint by identifier. This is necessary
+   * for the route-manager and similar code that that needs to talk about
+   * transitions in a human-meaningful way (including persistence).
+   */
+  WayptRef findTransitionByName(const std::string& aIdent) const;
+  
+  Transition* findTransitionByEnroute(Waypt* aEnroute) const;
+protected:
+    
+  bool commonRoute(Waypt* aEnroute, WayptVec& aPath, FGRunwayRef aRwy);
+  
+  ArrivalDeparture(const std::string& aIdent);
+  
+  
+  void addRunway(FGRunwayRef aRwy);
+
+  typedef std::map<FGRunwayRef, Transition*> RunwayTransitionMap;
+  RunwayTransitionMap _runways;
+  
+private:
+  friend class NavdataVisitor;
+  
+  void addTransition(Transition* aTrans);
+  
+  void setCommon(const WayptVec& aWps);
+
+  void addRunwayTransition(FGRunwayRef aRwy, Transition* aTrans);
+  
+  WayptVec _common;
+  
+  typedef std::map<WayptRef, Transition*> WptTransitionMap;
+  WptTransitionMap _enrouteTransitions;
+  
+  
+};
+
+class SID : public ArrivalDeparture
+{
+public:  
+  virtual bool route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath);
+  
+private:
+  friend class NavdataVisitor;
+    
+  SID(const std::string& aIdent);
+};
+
+class STAR : public ArrivalDeparture
+{
+public:  
+  virtual bool route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath);
+  
+private:
+  friend class NavdataVisitor;
+  
+  STAR(const std::string& aIdent);
+};
+
+} // of namespace
+
+#endif 
diff --git a/src/Navaids/route.cxx b/src/Navaids/route.cxx
new file mode 100644
index 000000000..613e5b3c4
--- /dev/null
+++ b/src/Navaids/route.cxx
@@ -0,0 +1,679 @@
+// route.cxx - classes supporting waypoints and route structures
+
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "route.hxx"
+
+// std
+#include <map>
+#include <fstream>
+
+// Boost
+#include <boost/algorithm/string/case_conv.hpp>
+#include <boost/algorithm/string.hpp>
+
+// SimGear
+#include <simgear/structure/exception.hxx>
+#include <simgear/xml/easyxml.hxx>
+#include <simgear/misc/sg_path.hxx>
+
+// FlightGear
+#include <Navaids/procedure.hxx>
+#include <Navaids/waypoint.hxx>
+#include <Airports/simple.hxx>
+
+using std::string;
+using std::vector;
+using std::endl;
+using std::fstream;
+
+namespace flightgear {
+
+Waypt::Waypt(Route* aOwner) :
+  _altitudeFt(0.0),
+  _speedKts(0.0),
+  _altRestrict(RESTRICT_NONE),
+  _speedRestrict(RESTRICT_NONE),
+  _owner(aOwner),
+  _flags(0)
+{
+}
+
+std::string Waypt::ident() const
+{
+  return "";
+}
+  
+bool Waypt::flag(WayptFlag aFlag) const
+{
+  return (_flags & aFlag);
+}
+	
+void Waypt::setFlag(WayptFlag aFlag, bool aV)
+{
+  _flags = (_flags & ~aFlag);
+  if (aV) _flags |= aFlag;
+}
+
+bool Waypt::matches(Waypt* aOther) const
+{
+  assert(aOther);
+  if (ident() != aOther->ident()) { // cheap check first
+    return false;
+  }
+  
+  return matches(aOther->position());
+}
+
+
+bool Waypt::matches(const SGGeod& aPos) const
+{
+  double d = SGGeodesy::distanceM(position(), aPos);
+  return (d < 100.0); // 100 metres seems plenty
+}
+
+void Waypt::setAltitude(double aAlt, RouteRestriction aRestrict)
+{
+  _altitudeFt = aAlt;
+  _altRestrict = aRestrict;
+}
+
+void Waypt::setSpeed(double aSpeed, RouteRestriction aRestrict)
+{
+  _speedKts = aSpeed;
+  _speedRestrict = aRestrict;
+}
+
+std::pair<double, double>
+Waypt::courseAndDistanceFrom(const SGGeod& aPos) const
+{
+  if (flag(WPT_DYNAMIC)) {
+    return std::make_pair(0.0, 0.0);
+  }
+  
+  double course, az2, distance;
+  SGGeodesy::inverse(aPos, position(), course, az2, distance);
+  return std::make_pair(course, distance);
+}
+  
+///////////////////////////////////////////////////////////////////////////
+// persistence
+
+static RouteRestriction restrictionFromString(const char* aStr)
+{
+  std::string l = boost::to_lower_copy(std::string(aStr));
+
+  if (l == "at") return RESTRICT_AT;
+  if (l == "above") return RESTRICT_ABOVE;
+  if (l == "below") return RESTRICT_BELOW;
+  if (l == "none") return RESTRICT_NONE;
+  
+  if (l.empty()) return RESTRICT_NONE;
+  throw sg_io_exception("unknown restriction specification:" + l, 
+    "Route restrictFromString");
+}
+
+static const char* restrictionToString(RouteRestriction aRestrict)
+{
+  switch (aRestrict) {
+  case RESTRICT_AT: return "at";
+  case RESTRICT_BELOW: return "below";
+  case RESTRICT_ABOVE: return "above";
+  case RESTRICT_NONE: return "none";
+  default:
+    throw sg_exception("invalid route restriction",
+      "Route restrictToString");
+  }
+}
+
+Waypt* Waypt::createInstance(Route* aOwner, const std::string& aTypeName)
+{
+  Waypt* r = NULL;
+  if (aTypeName == "basic") {
+    r = new BasicWaypt(aOwner);
+  } else if (aTypeName == "navaid") {
+    r = new NavaidWaypoint(aOwner);
+  } else if (aTypeName == "offset-navaid") {
+    r = new OffsetNavaidWaypoint(aOwner);
+  } else if (aTypeName == "hold") {
+    r = new Hold(aOwner);
+  } else if (aTypeName == "runway") {
+    r = new RunwayWaypt(aOwner);
+  } else if (aTypeName == "hdgToAlt") {
+    r = new HeadingToAltitude(aOwner);
+  } else if (aTypeName == "dmeIntercept") {
+    r = new DMEIntercept(aOwner);
+  } else if (aTypeName == "radialIntercept") {
+    r = new RadialIntercept(aOwner);
+  } else if (aTypeName == "vectors") {
+    r = new ATCVectors(aOwner);
+  } 
+
+  if (!r || (r->type() != aTypeName)) {
+    throw sg_exception("broken factory method for type:" + aTypeName,
+      "Waypt::createInstance");
+  }
+  
+  return r;
+}
+
+WayptRef Waypt::createFromProperties(Route* aOwner, SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("type")) {
+    throw sg_io_exception("bad props node, no type provided", 
+      "Waypt::createFromProperties");
+  }
+  
+  WayptRef nd(createInstance(aOwner, aProp->getStringValue("type")));
+  nd->initFromProperties(aProp);
+  return nd;
+}
+  
+void Waypt::saveAsNode(SGPropertyNode* n) const
+{
+  n->setStringValue("type", type());
+  writeToProperties(n);
+}
+
+void Waypt::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (aProp->hasChild("generated")) {
+    setFlag(WPT_GENERATED, aProp->getBoolValue("generated")); 
+  }
+  
+  if (aProp->hasChild("overflight")) {
+    setFlag(WPT_OVERFLIGHT, aProp->getBoolValue("overflight")); 
+  }
+  
+  if (aProp->hasChild("arrival")) {
+    setFlag(WPT_ARRIVAL, aProp->getBoolValue("arrival")); 
+  }
+  
+  if (aProp->hasChild("departure")) {
+    setFlag(WPT_DEPARTURE, aProp->getBoolValue("departure")); 
+  }
+  
+  if (aProp->hasChild("miss")) {
+    setFlag(WPT_MISS, aProp->getBoolValue("miss")); 
+  }
+  
+  if (aProp->hasChild("alt-restrict")) {
+    _altRestrict = restrictionFromString(aProp->getStringValue("alt-restrict"));
+    _altitudeFt = aProp->getDoubleValue("altitude-ft");
+  }
+  
+  if (aProp->hasChild("speed-restrict")) {
+    _speedRestrict = restrictionFromString(aProp->getStringValue("speed-restrict"));
+    _speedKts = aProp->getDoubleValue("speed-kts");
+  }
+  
+  
+}
+
+void Waypt::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  if (flag(WPT_OVERFLIGHT)) {
+    aProp->setBoolValue("overflight", true);
+  }
+
+  if (flag(WPT_DEPARTURE)) {
+    aProp->setBoolValue("departure", true);
+  }
+  
+  if (flag(WPT_ARRIVAL)) {
+    aProp->setBoolValue("arrival", true);
+  }
+  
+  if (flag(WPT_MISS)) {
+    aProp->setBoolValue("miss", true);
+  }
+  
+  if (flag(WPT_GENERATED)) {
+    aProp->setBoolValue("generated", true);
+  }
+  
+  if (_altRestrict != RESTRICT_NONE) {
+    aProp->setStringValue("alt-restrict", restrictionToString(_altRestrict));
+    aProp->setDoubleValue("altitude-ft", _altitudeFt);
+  }
+  
+  if (_speedRestrict != RESTRICT_NONE) {
+    aProp->setStringValue("speed-restrict", restrictionToString(_speedRestrict));
+    aProp->setDoubleValue("speed-kts", _speedKts);
+  }
+}
+
+void Route::dumpRouteToFile(const WayptVec& aRoute, const std::string& aName)
+{
+  SGPath p = "/Users/jmt/Desktop/" + aName + ".kml";
+  std::fstream f;
+  f.open(p.str().c_str(), fstream::out | fstream::app);
+  if (!f.is_open()) {
+    SG_LOG(SG_GENERAL, SG_WARN, "unable to open:" << p.str());
+    return;
+  }
+  
+// pre-amble
+  f << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+      "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"
+    "<Document>\n";
+
+  dumpRouteToLineString(aName, aRoute, f);
+  
+// post-amble
+  f << "</Document>\n" 
+    "</kml>" << endl;
+  f.close();
+}
+
+void Route::dumpRouteToLineString(const std::string& aIdent,
+  const WayptVec& aRoute, std::ostream& aStream)
+{
+  // preamble
+  aStream << "<Placemark>\n";
+  aStream << "<name>" << aIdent << "</name>\n";
+  aStream << "<LineString>\n";
+  aStream << "<tessellate>1</tessellate>\n";
+  aStream << "<coordinates>\n";
+  
+  // waypoints
+  for (unsigned int i=0; i<aRoute.size(); ++i) {
+    SGGeod pos = aRoute[i]->position();
+    aStream << pos.getLongitudeDeg() << "," << pos.getLatitudeDeg() << " " << endl;
+  }
+  
+  // postable
+  aStream << "</coordinates>\n"
+    "</LineString>\n"
+    "</Placemark>\n" << endl;
+}
+
+///////////////////////////////////////////////////////////////////////////
+
+class NavdataVisitor : public XMLVisitor {
+public:
+  NavdataVisitor(FGAirport* aApt, const SGPath& aPath);
+
+protected:
+  virtual void startXML (); 
+  virtual void endXML   ();
+  virtual void startElement (const char * name, const XMLAttributes &atts);
+  virtual void endElement (const char * name);
+  virtual void data (const char * s, int len);
+  virtual void pi (const char * target, const char * data);
+  virtual void warning (const char * message, int line, int column);
+  virtual void error (const char * message, int line, int column);
+
+private:
+  Waypt* buildWaypoint();
+  void processRunways(ArrivalDeparture* aProc, const XMLAttributes &atts);
+ 
+  void finishApproach();
+  void finishSid();
+  void finishStar();
+  
+  FGAirport* _airport;
+  SGPath _path;
+  string _text; ///< last element text value
+  
+  SID* _sid;
+  STAR* _star;
+  Approach* _approach;
+
+  WayptVec _waypoints; ///< waypoint list for current approach/sid/star
+  WayptVec _transWaypts; ///< waypoint list for current transition
+  
+  string _wayptName;
+  string _wayptType;
+  string _ident; // id of segment under construction
+  string _transIdent;
+  double _longitude, _latitude, _altitude, _speed;
+  RouteRestriction _altRestrict;
+  
+  double _holdRadial; // inbound hold radial, or -1 if radial is 'inbound'
+  double _holdTD; ///< hold time (seconds) or distance (nm), based on flag below
+  bool _holdRighthanded;
+  bool _holdDistance; // true, TD is distance in nm; false, TD is time in seconds
+  
+  double _course, _radial, _dmeDistance;
+};
+
+void Route::loadAirportProcedures(const SGPath& aPath, FGAirport* aApt)
+{
+  assert(aApt);
+  try {
+    NavdataVisitor visitor(aApt, aPath);
+    readXML(aPath.str(), visitor);
+  } catch (sg_io_exception& ex) {
+    SG_LOG(SG_GENERAL, SG_WARN, "failured parsing procedures: " << aPath.str() <<
+      "\n\t" << ex.getMessage() << "\n\tat:" << ex.getLocation().asString());
+  } catch (sg_exception& ex) {
+    SG_LOG(SG_GENERAL, SG_WARN, "failured parsing procedures: " << aPath.str() <<
+      "\n\t" << ex.getMessage());
+  }
+}
+
+NavdataVisitor::NavdataVisitor(FGAirport* aApt, const SGPath& aPath):
+  _airport(aApt),
+  _path(aPath),
+  _sid(NULL),
+  _star(NULL),
+  _approach(NULL)
+{
+}
+
+void NavdataVisitor::startXML()
+{
+}
+
+void NavdataVisitor::endXML()
+{
+}
+
+void NavdataVisitor::startElement(const char* name, const XMLAttributes &atts)
+{
+  _text.clear();
+  string tag(name);
+  if (tag == "Airport") {
+    string icao(atts.getValue("ICAOcode"));
+    if (_airport->ident() != icao) {
+      throw sg_format_exception("Airport and ICAO mismatch", icao, _path.str());
+    }
+  } else if (tag == "Sid") {
+    string ident(atts.getValue("Name"));
+    _sid = new SID(ident);
+    _waypoints.clear();
+    processRunways(_sid, atts);
+  } else if (tag == "Star") {
+    string ident(atts.getValue("Name"));
+    _star = new STAR(ident);
+    _waypoints.clear();
+    processRunways(_star, atts);
+  } else if ((tag == "Sid_Waypoint") ||
+      (tag == "App_Waypoint") ||
+      (tag == "Star_Waypoint") ||
+      (tag == "AppTr_Waypoint") ||
+      (tag == "SidTr_Waypoint") ||
+      (tag == "RwyTr_Waypoint"))
+  {
+    // reset waypoint data
+    _speed = 0.0;
+    _altRestrict = RESTRICT_NONE;
+    _altitude = 0.0;
+  } else if (tag == "Approach") {
+    _ident = atts.getValue("Name");
+    _waypoints.clear();
+    _approach = new Approach(_ident);
+  } else if ((tag == "Sid_Transition") || 
+             (tag == "App_Transition") ||
+             (tag == "Star_Transition")) {
+    _transIdent = atts.getValue("Name");
+    _transWaypts.clear();
+  } else if (tag == "RunwayTransition") {
+    _transIdent = atts.getValue("Runway");
+    _transWaypts.clear();
+  } else {
+    
+  }
+}
+
+void NavdataVisitor::processRunways(ArrivalDeparture* aProc, const XMLAttributes &atts)
+{
+  string v("All");
+  if (atts.hasAttribute("Runways")) {
+    v = atts.getValue("Runways");
+  }
+  
+  if (v == "All") {
+    for (unsigned int r=0; r<_airport->numRunways(); ++r) {
+      aProc->addRunway(_airport->getRunwayByIndex(r));
+    }
+    return;
+  }
+  
+  vector<string> rwys;
+  boost::split(rwys, v, boost::is_any_of(" ,"));
+  for (unsigned int r=0; r<rwys.size(); ++r) {
+    FGRunway* rwy = _airport->getRunwayByIdent(rwys[r]);
+    aProc->addRunway(rwy);
+  }
+}
+
+void NavdataVisitor::endElement(const char* name)
+{
+  string tag(name);
+  if ((tag == "Sid_Waypoint") ||
+      (tag == "App_Waypoint") ||
+      (tag == "Star_Waypoint"))
+  {
+    _waypoints.push_back(buildWaypoint());
+  } else if ((tag == "AppTr_Waypoint") || 
+             (tag == "SidTr_Waypoint") ||
+             (tag == "RwyTr_Waypoint") ||
+             (tag == "StarTr_Waypoint")) 
+  {
+    _transWaypts.push_back(buildWaypoint());
+  } else if (tag == "Sid_Transition") {
+    assert(_sid);
+    // SID waypoints are stored backwards, to share code with STARs
+    std::reverse(_transWaypts.begin(), _transWaypts.end());
+    Transition* t = new Transition(_transIdent, _sid, _transWaypts);
+    _sid->addTransition(t);
+  } else if (tag == "Star_Transition") {
+    assert(_star);
+    Transition* t = new Transition(_transIdent, _star, _transWaypts);
+    _star->addTransition(t);
+  } else if (tag == "App_Transition") {
+    assert(_approach);
+    Transition* t = new Transition(_transIdent, _approach, _transWaypts);
+    _approach->addTransition(t);
+  } else if (tag == "RunwayTransition") {
+    ArrivalDeparture* ad;
+    if (_sid) {
+      // SID waypoints are stored backwards, to share code with STARs
+      std::reverse(_transWaypts.begin(), _transWaypts.end());
+      ad = _sid;
+    } else {
+      ad = _star;
+    }
+    
+    Transition* t = new Transition(_transIdent, ad, _transWaypts);
+    FGRunwayRef rwy = _airport->getRunwayByIdent(_transIdent);
+    ad->addRunwayTransition(rwy, t);
+  } else if (tag == "Approach") {
+    finishApproach();
+  } else if (tag == "Sid") {
+    finishSid();
+  } else if (tag == "Star") {
+    finishStar();  
+  } else if (tag == "Longitude") {
+    _longitude = atof(_text.c_str());
+  } else if (tag == "Latitude") {
+    _latitude = atof(_text.c_str());
+  } else if (tag == "Name") {
+    _wayptName = _text;
+  } else if (tag == "Type") {
+    _wayptType = _text;
+  } else if (tag == "Speed") {
+    _speed = atoi(_text.c_str());
+  } else if (tag == "Altitude") {
+    _altitude = atof(_text.c_str());
+  } else if (tag == "AltitudeRestriction") {
+    if (_text == "at") {
+      _altRestrict = RESTRICT_AT;
+    } else if (_text == "above") {
+      _altRestrict = RESTRICT_ABOVE;
+    } else if (_text == "below") {
+      _altRestrict = RESTRICT_BELOW;
+    } else {
+      throw sg_format_exception("Unrecognized altitude restriction", _text);
+    }
+  } else if (tag == "Hld_Rad_or_Inbd") {
+    if (_text == "Inbd") {
+      _holdRadial = -1.0;
+    }
+  } else if (tag == "Hld_Time_or_Dist") {
+    _holdDistance = (_text == "Dist");
+  } else if (tag == "Hld_Rad_value") {
+    _holdRadial = atof(_text.c_str());
+  } else if (tag == "Hld_Turn") {
+    _holdRighthanded = (_text == "Right");
+  } else if (tag == "Hld_td_value") {
+    _holdTD = atof(_text.c_str());
+  } else if (tag == "Hdg_Crs_value") {
+    _course = atof(_text.c_str());
+  } else if (tag == "DMEtoIntercept") {
+    _dmeDistance = atof(_text.c_str());
+  } else if (tag == "RadialtoIntercept") {
+    _radial = atof(_text.c_str());
+  } else {
+    
+  }
+}
+
+Waypt* NavdataVisitor::buildWaypoint()
+{
+  Waypt* wp = NULL;
+  if (_wayptType == "Normal") {
+    // new LatLonWaypoint
+    SGGeod pos(SGGeod::fromDeg(_longitude, _latitude));
+    wp = new BasicWaypt(pos, _wayptName, NULL);
+  } else if (_wayptType == "Runway") {
+    string ident = _wayptName.substr(2);
+    FGRunwayRef rwy = _airport->getRunwayByIdent(ident);
+    wp = new RunwayWaypt(rwy, NULL);
+  } else if (_wayptType == "Hold") {
+    SGGeod pos(SGGeod::fromDeg(_longitude, _latitude));
+    Hold* h = new Hold(pos, _wayptName, NULL);
+    wp = h;
+    if (_holdRighthanded) {
+      h->setRightHanded();
+    } else {
+      h->setLeftHanded();
+    }
+    
+    if (_holdDistance) {
+      h->setHoldDistance(_holdTD);
+    } else {
+      h->setHoldTime(_holdTD * 60.0);
+    }
+    
+    if (_holdRadial >= 0.0) {
+      h->setHoldRadial(_holdRadial);
+    }
+  } else if (_wayptType == "Vectors") {
+    wp = new ATCVectors(NULL, _airport);
+  } else if ((_wayptType == "Intc") || (_wayptType == "VorRadialIntc")) {
+    SGGeod pos(SGGeod::fromDeg(_longitude, _latitude));
+    wp = new RadialIntercept(NULL, _wayptName, pos, _course, _radial);
+  } else if (_wayptType == "DmeIntc") {
+    SGGeod pos(SGGeod::fromDeg(_longitude, _latitude));
+    wp = new DMEIntercept(NULL, _wayptName, pos, _course, _dmeDistance);
+  } else if (_wayptType == "ConstHdgtoAlt") {
+    wp = new HeadingToAltitude(NULL, _wayptName, _course);
+  } else {
+    SG_LOG(SG_GENERAL, SG_ALERT, "implement waypoint type:" << _wayptType);
+    throw sg_format_exception("Unrecognized waypt type", _wayptType);
+  }
+  
+  assert(wp);
+  if ((_altitude > 0.0) && (_altRestrict != RESTRICT_NONE)) {
+    wp->setAltitude(_altitude,_altRestrict);
+  }
+  
+  if (_speed > 0.0) {
+    wp->setSpeed(_speed, RESTRICT_AT); // or _BELOW?
+  }
+  
+  return wp;
+}
+
+void NavdataVisitor::finishApproach()
+{
+  WayptVec::iterator it;
+  FGRunwayRef rwy;
+  
+// find the runway node
+  for (it = _waypoints.begin(); it != _waypoints.end(); ++it) {
+    FGPositionedRef navid = (*it)->source();
+    if (!navid) {
+      continue;
+    }
+    
+    if (navid->type() == FGPositioned::RUNWAY) {
+      rwy = (FGRunway*) navid.get();
+      break;
+    }
+  }
+  
+  if (!rwy) {
+    throw sg_format_exception("Malformed approach, no runway waypt", _ident);
+  }
+  
+  WayptVec primary(_waypoints.begin(), it);
+  // erase all points up to and including the runway, to leave only the
+  // missed segments
+  _waypoints.erase(_waypoints.begin(), ++it);
+  
+  _approach->setRunway(rwy);
+  _approach->setPrimaryAndMissed(primary, _waypoints);
+  _airport->addApproach(_approach);
+  _approach = NULL;
+}
+
+void NavdataVisitor::finishSid()
+{
+  // reverse order, because that's how we deal with commonality between
+  // STARs and SIDs. SID::route undoes  this
+  std::reverse(_waypoints.begin(), _waypoints.end());
+  _sid->setCommon(_waypoints);
+  _airport->addSID(_sid);
+  _sid = NULL;
+}
+
+void NavdataVisitor::finishStar()
+{
+  _star->setCommon(_waypoints);
+  _airport->addSTAR(_star);
+  _star = NULL;
+}
+
+void NavdataVisitor::data (const char * s, int len)
+{
+  _text += string(s, len);
+}
+
+
+void NavdataVisitor::pi (const char * target, const char * data) {
+  //cout << "Processing instruction " << target << ' ' << data << endl;
+}
+
+void NavdataVisitor::warning (const char * message, int line, int column) {
+  SG_LOG(SG_IO, SG_WARN, "Warning: " << message << " (" << line << ',' << column << ')');
+}
+
+void NavdataVisitor::error (const char * message, int line, int column) {
+  SG_LOG(SG_IO, SG_ALERT, "Error: " << message << " (" << line << ',' << column << ')');
+}
+
+} // of namespace flightgear
diff --git a/src/Navaids/route.hxx b/src/Navaids/route.hxx
new file mode 100644
index 000000000..a23d728a7
--- /dev/null
+++ b/src/Navaids/route.hxx
@@ -0,0 +1,208 @@
+/**
+ * route.hxx - defines basic route and route-element classes. Route elements
+ * are specialised into waypoints and related things. Routes are any class tha
+ * owns a collection (list, tree, graph) of route elements - such as airways,
+ * procedures or a flight plan.
+ */
+ 
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifndef FG_ROUTE_HXX
+#define FG_ROUTE_HXX
+
+// std
+#include <vector>
+#include <map>
+#include <iosfwd>
+
+// Simgear
+#include <simgear/math/SGMath.hxx>
+#include <simgear/structure/SGReferenced.hxx>
+#include <simgear/structure/SGSharedPtr.hxx>
+#include <simgear/props/props.hxx>
+
+// forward decls
+class FGPositioned;
+class SGPath;
+class FGAirport;
+
+namespace flightgear
+{
+
+// forward decls
+class Route;
+class Waypt;
+class NavdataVisitor;
+
+typedef SGSharedPtr<Waypt> WayptRef;
+
+typedef enum {
+	WPT_MAP           = 1 << 0, ///< missed approach point
+	WPT_IAF           = 1 << 1, ///< initial approach fix
+	WPT_FAF           = 1 << 2, ///< final approach fix
+	WPT_OVERFLIGHT    = 1 << 3, ///< must overfly the point directly
+	WPT_TRANSITION    = 1 << 4, ///< transition to/from enroute structure
+	WPT_MISS          = 1 << 5, ///< segment is part of missed approach
+  /// waypoint position is dynamic, i.e moves based on other criteria,
+  /// such as altitude, inbound course, or so on.
+  WPT_DYNAMIC       = 1 << 6,
+  /// waypoint was created automatically (not manually entered/loaded)
+  /// for example waypoints from airway routing or a procedure  
+  WPT_GENERATED     = 1 << 7,
+  
+  WPT_DEPARTURE     = 1 << 8,
+  WPT_ARRIVAL       = 1 << 9
+} WayptFlag;
+
+typedef enum {
+	RESTRICT_NONE,
+	RESTRICT_AT,
+	RESTRICT_ABOVE,
+	RESTRICT_BELOW
+} RouteRestriction;
+
+/**
+ * Abstract base class for waypoints (and things that are treated similarly
+ * by navigation systems)
+ */
+class Waypt : public SGReferenced
+{
+public:
+	Route* owner() const 
+		{ return _owner; }
+  
+  /**
+   * Return true course (in degrees) and distance (in metres) from the provided
+   * position to this waypoint
+   */
+  virtual std::pair<double, double> courseAndDistanceFrom(const SGGeod& aPos) const;
+                  	
+	virtual SGGeod position() const = 0;
+	
+	/**
+	 * The Positioned associated with this element, if one exists
+	 */
+	virtual FGPositioned* source() const
+		{ return NULL; }
+	
+	virtual double altitudeFt() const 
+		{ return _altitudeFt; }
+		
+	virtual double speedKts() const
+		{ return _speedKts; }
+	
+	virtual RouteRestriction altitudeRestriction() const
+		{ return _altRestrict; }
+	
+	virtual RouteRestriction speedRestriction() const
+		{ return _speedRestrict; }
+	
+  void setAltitude(double aAlt, RouteRestriction aRestrict);
+  void setSpeed(double aSpeed, RouteRestriction aRestrict);
+  
+  /**
+   * Identifier assoicated with the waypoint. Human-readable, but
+   * possibly quite terse, and definitiely not unique.
+   */
+	virtual std::string ident() const;
+	
+	/**
+	 * Test if the specified flag is set for this element
+	 */
+	virtual bool flag(WayptFlag aFlag) const;
+	
+  void setFlag(WayptFlag aFlag, bool aV = true);
+  
+  /**
+   * Factory method
+   */
+  static WayptRef createFromProperties(Route* aOwner, SGPropertyNode_ptr aProp);
+  
+  void saveAsNode(SGPropertyNode* node) const;
+  
+  /**
+   * Test if this element and another are 'the same', i.e matching
+   * ident and lat/lon are approximately equal
+   */
+  bool matches(Waypt* aOther) const;
+
+  /**
+   * Test if this element and a position 'the same'
+   * this can be defined by either position, ident or both
+   */
+  bool matches(const SGGeod& aPos) const;
+  
+  virtual std::string type() const = 0;
+protected:
+  friend class NavdataVisitor;
+  
+	Waypt(Route* aOwner);
+  
+  /**
+   * Persistence helper - read node properties from a file
+   */
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  
+  /**
+   * Persistence helper - save this element to a node
+   */
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+  
+  typedef Waypt* (FactoryFunction)(Route* aOwner) ;
+  static void registerFactory(const std::string aNodeType, FactoryFunction* aFactory);
+  
+  double _altitudeFt;
+	double _speedKts;
+	RouteRestriction _altRestrict;
+	RouteRestriction _speedRestrict;
+private:
+
+  /**
+   * Create an instance of a concrete subclass, or throw an exception
+   */
+  static Waypt* createInstance(Route* aOwner, const std::string& aTypeName);
+
+	Route* _owner;
+	unsigned short _flags;
+	
+};
+
+typedef std::vector<WayptRef> WayptVec;
+  
+class Route
+{
+public:
+  /**
+   *
+   */
+  virtual std::string ident() const = 0;
+  
+  static void loadAirportProcedures(const SGPath& aPath, FGAirport* aApt);
+  
+  static void dumpRouteToFile(const WayptVec& aRoute, const std::string& aName);
+  
+  static void dumpRouteToLineString(const std::string& aIdent,
+    const WayptVec& aRoute, std::ostream& aStream);
+private:
+
+};
+
+} // of namespace flightgear
+
+#endif // of FG_ROUTE_HXX
diff --git a/src/Navaids/routePath.cxx b/src/Navaids/routePath.cxx
new file mode 100644
index 000000000..b9ac48c1e
--- /dev/null
+++ b/src/Navaids/routePath.cxx
@@ -0,0 +1,346 @@
+#include <Navaids/routePath.hxx>
+
+#include <simgear/structure/exception.hxx>
+#include <simgear/magvar/magvar.hxx>
+#include <simgear/timing/sg_time.hxx>
+
+#include <Main/globals.hxx>
+#include <Airports/runways.hxx>
+#include <Navaids/waypoint.hxx>
+#include <Navaids/positioned.hxx>
+
+namespace flightgear {
+  bool geocRadialIntersection(const SGGeoc& a, double r1, const SGGeoc& b, double r2, SGGeoc& result);
+}
+
+using namespace flightgear;
+
+// implement Point(s) known distance from a great circle
+
+static double sqr(const double x)
+{
+  return x * x;
+}
+
+double pointsKnownDistanceFromGC(const SGGeoc& a, const SGGeoc&b, const SGGeoc& d, double dist)
+{
+  double A = SGGeodesy::courseRad(a, d) - SGGeodesy::courseRad(a, b);
+  double bDist = SGGeodesy::distanceRad(a, d);
+  
+  // r=(cos(b)^2+sin(b)^2*cos(A)^2)^(1/2)
+  double r = pow(sqr(cos(bDist)) + sqr(sin(bDist)) * sqr(cos(A)), 0.5); 
+  
+  double p = atan2(sin(bDist)*cos(A), cos(bDist));
+  
+  if (sqr(cos(dist)) > sqr(r)) {
+    SG_LOG(SG_GENERAL, SG_INFO, "pointsKnownDistanceFromGC, no points exist");
+    return -1.0;
+  }
+  
+  double dp1 = p + acos(cos(dist)/r);
+  double dp2 = p - acos(cos(dist)/r);
+  
+  double dp1Nm = fabs(dp1 * SG_RAD_TO_NM);
+  double dp2Nm = fabs(dp2 * SG_RAD_TO_NM);
+  
+  return SGMiscd::min(dp1Nm, dp2Nm);
+}
+
+RoutePath::RoutePath(const flightgear::WayptVec& wpts) :
+  _waypts(wpts)
+{
+  _pathClimbFPM = 1200;
+  _pathDescentFPM = 800;
+  _pathIAS = 190; 
+  _pathTurnRate = 3.0; // 3 deg/sec = 180def/min = standard rate turn
+}
+
+SGGeodVec RoutePath::pathForIndex(int index) const
+{
+  if (index == 0) {
+    return SGGeodVec(); // no path for first waypoint
+  }
+  
+  if (_waypts[index]->type() == "vectors") {
+    return SGGeodVec(); // empty
+  }
+  
+  if (_waypts[index]->type() == "hold") {
+    return pathForHold((Hold*) _waypts[index].get());
+  }
+    
+  SGGeodVec r;
+  SGGeod pos;
+  if (!computedPositionForIndex(index-1, pos)) {
+    return SGGeodVec();
+  }
+  
+  r.push_back(pos);
+  if (!computedPositionForIndex(index, pos)) {
+    return SGGeodVec();
+  }
+  
+  r.push_back(pos);
+  
+  if (_waypts[index]->type() == "runway") {
+    // runways get an extra point, at the end. this is particularly
+    // important so missed approach segments draw correctly
+    FGRunway* rwy = static_cast<RunwayWaypt*>(_waypts[index].get())->runway();
+    r.push_back(rwy->end());
+  }
+  
+  return r;
+}
+
+SGGeod RoutePath::positionForIndex(int index) const
+{
+  SGGeod r;
+  bool ok = computedPositionForIndex(index, r);
+  if (!ok) {
+    return SGGeod();
+  }
+  
+  return r;
+}
+
+SGGeodVec RoutePath::pathForHold(Hold* hold) const
+{
+  int turnSteps = 16;
+  double hdg = hold->inboundRadial();
+  double turnDelta = 180.0 / turnSteps;
+  
+  SGGeodVec r;
+  double az2;
+  double stepTime = turnDelta / _pathTurnRate; // in seconds
+  double stepDist = _pathIAS * (stepTime / 3600.0) * SG_NM_TO_METER;
+  double legDist = hold->isDistance() ? 
+    hold->timeOrDistance() 
+    : _pathIAS * (hold->timeOrDistance() / 3600.0);
+  legDist *= SG_NM_TO_METER;
+  
+  if (hold->isLeftHanded()) {
+    turnDelta = -turnDelta;
+  }  
+  SGGeod pos = hold->position();
+  r.push_back(pos);
+
+  // turn+leg sides are a mirror
+  for (int j=0; j < 2; ++j) {
+  // turn
+    for (int i=0;i<turnSteps; ++i) {
+      hdg += turnDelta;
+      SGGeodesy::direct(pos, hdg, stepDist, pos, az2);
+      r.push_back(pos);
+    }
+    
+  // leg
+    SGGeodesy::direct(pos, hdg, legDist, pos, az2);
+    r.push_back(pos);
+  } // of leg+turn duplication
+  
+  return r;
+}
+
+/**
+ * the path context holds the state of of an imaginary aircraft traversing
+ * the route, and limits the rate at which heading / altitude / position can
+ * change
+ */
+class RoutePath::PathCtx
+{
+public:
+  SGGeod pos;
+  double heading;
+};
+
+bool RoutePath::computedPositionForIndex(int index, SGGeod& r) const
+{
+  if ((index < 0) || (index >= (int) _waypts.size())) {
+    throw sg_range_exception("waypt index out of range", 
+      "RoutePath::computedPositionForIndex");
+  }
+
+  WayptRef w = _waypts[index];
+  if (!w->flag(WPT_DYNAMIC)) {
+    r = w->position();
+    return true;
+  }
+  
+  if (w->type() == "radialIntercept") {
+    // radial intersection along track
+    SGGeod prev;
+    if (!computedPositionForIndex(index - 1, prev)) {
+      return false;
+    }
+  
+    SGGeoc prevGc = SGGeoc::fromGeod(prev);
+    SGGeoc navid = SGGeoc::fromGeod(w->position());
+    SGGeoc rGc;
+    double magVar = magVarFor(prev);
+    
+    RadialIntercept* i = (RadialIntercept*) w.get();
+    double radial = i->radialDegMagnetic() + magVar;
+    double track = i->courseDegMagnetic() + magVar;
+    bool ok = geocRadialIntersection(prevGc, track, navid, radial, rGc);
+    if (!ok) {
+      return false;
+    }
+    
+    r = SGGeod::fromGeoc(rGc);
+    return true;
+  } else if (w->type() == "dmeIntercept") {
+    // find the point along the DME track, from prev, that is the correct distance
+    // from the DME
+    SGGeod prev;
+    if (!computedPositionForIndex(index - 1, prev)) {
+      return false;
+    }
+    
+    DMEIntercept* di = (DMEIntercept*) w.get();
+    
+    SGGeoc prevGc = SGGeoc::fromGeod(prev);
+    SGGeoc navid = SGGeoc::fromGeod(w->position());
+    double distRad = di->dmeDistanceNm() * SG_NM_TO_RAD;
+    SGGeoc rGc;
+
+    SGGeoc bPt;
+    double crs = di->courseDegMagnetic() + magVarFor(prev);
+    SGGeodesy::advanceRadM(prevGc, crs, 100 * SG_NM_TO_RAD, bPt);
+
+    double dNm = pointsKnownDistanceFromGC(prevGc, bPt, navid, distRad);
+    if (dNm < 0.0) {
+      return false;
+    }
+    
+    double az2;
+    SGGeodesy::direct(prev, crs, dNm * SG_NM_TO_METER, r, az2);
+    return true;
+  } else if (w->type() == "hdgToAlt") {
+    HeadingToAltitude* h = (HeadingToAltitude*) w.get();
+    double climb = h->altitudeFt() - computeAltitudeForIndex(index - 1);
+    double d = distanceForClimb(climb);
+
+    SGGeod prevPos;
+    if (!computedPositionForIndex(index - 1, prevPos)) {
+      return false;
+    }
+    
+    double hdg = h->headingDegMagnetic() + magVarFor(prevPos);
+    
+    double az2;
+    SGGeodesy::direct(prevPos, hdg, d * SG_NM_TO_METER, r, az2);
+    return true;
+  } else if (w->type() == "vectors"){
+    return false;
+  } else if (w->type() == "hold") {
+    r = w->position();
+    return true;
+  }
+  
+  SG_LOG(SG_GENERAL, SG_INFO, "RoutePath::computedPositionForIndex: unhandled type:" << w->type());
+  return false;
+}
+
+double RoutePath::computeAltitudeForIndex(int index) const
+{
+  if ((index < 0) || (index >= (int) _waypts.size())) {
+    throw sg_range_exception("waypt index out of range", 
+      "RoutePath::computeAltitudeForIndex");
+  }
+  
+  WayptRef w = _waypts[index];
+  if (w->altitudeRestriction() != RESTRICT_NONE) {
+    return w->altitudeFt(); // easy!
+  }
+  
+  if (w->type() == "runway") {
+    FGRunway* rwy = static_cast<RunwayWaypt*>(w.get())->runway();
+    return rwy->threshold().getElevationFt();
+  } else if ((w->type() == "hold") || (w->type() == "vectors")) {
+    // pretend we don't change altitude in holds/vectoring
+    return computeAltitudeForIndex(index - 1);
+  }
+
+  double prevAlt = computeAltitudeForIndex(index - 1);
+// find distance to previous, and hence climb/descent 
+  SGGeod pos, prevPos;
+  
+  if (!computedPositionForIndex(index, pos) ||
+      !computedPositionForIndex(index - 1, prevPos))
+  {
+    SG_LOG(SG_GENERAL, SG_WARN, "unable to compute position for waypoints");
+    throw sg_range_exception("unable to compute position for waypoints");
+  }
+  
+  double d = SGGeodesy::distanceNm(prevPos, pos);
+  double tMinutes = (d / _pathIAS) * 60.0; // (nm / knots) * 60 = time in minutes
+  
+  double deltaFt; // change in altitude in feet
+  if (w->flag(WPT_ARRIVAL) && !w->flag(WPT_MISS)) {
+    deltaFt = -_pathDescentFPM * tMinutes;
+  } else {
+    deltaFt = _pathClimbFPM * tMinutes;
+  }
+  
+  return prevAlt + deltaFt;
+}
+
+double RoutePath::computeTrackForIndex(int index) const
+{
+  if ((index < 0) || (index >= (int) _waypts.size())) {
+    throw sg_range_exception("waypt index out of range", 
+      "RoutePath::computeTrackForIndex");
+  }
+  
+  WayptRef w = _waypts[index];
+  if (w->type() == "radialIntercept") {
+    RadialIntercept* r = (RadialIntercept*) w.get();
+    return r->courseDegMagnetic();
+  } else if (w->type() == "dmeIntercept") {
+    DMEIntercept* d = (DMEIntercept*) w.get();
+    return d->courseDegMagnetic();
+  } else if (w->type() == "hdgToAlt") {
+    HeadingToAltitude* h = (HeadingToAltitude*) w.get();
+    return h->headingDegMagnetic();
+  } else if (w->type() == "hold") {
+    Hold* h = (Hold*) w.get();
+    return h->inboundRadial();
+  } else if (w->type() == "vectors") {
+    SG_LOG(SG_GENERAL, SG_WARN, "asked for track from VECTORS");
+    throw sg_range_exception("asked for track from vectors waypt");
+  } else if (w->type() == "runway") {
+    FGRunway* rwy = static_cast<RunwayWaypt*>(w.get())->runway();
+    return rwy->headingDeg();
+  }
+  
+// course based upon previous and current pos
+  SGGeod pos, prevPos;
+  
+  if (!computedPositionForIndex(index, pos) ||
+      !computedPositionForIndex(index - 1, prevPos))
+  {
+    SG_LOG(SG_GENERAL, SG_WARN, "unable to compute position for waypoints");
+    throw sg_range_exception("unable to compute position for waypoints");
+  }
+
+  return SGGeodesy::courseDeg(prevPos, pos);
+}
+
+double RoutePath::distanceForClimb(double climbFt) const
+{
+  double t = 0.0; // in seconds
+  if (climbFt > 0.0) {
+    t = (climbFt / _pathClimbFPM) * 60.0;
+  } else if (climbFt < 0.0) {
+    t = (climbFt / _pathDescentFPM) * 60.0;
+  }
+  
+  return _pathIAS * (t / 3600.0);
+}
+
+double RoutePath::magVarFor(const SGGeod& geod) const
+{
+  double jd = globals->get_time_params()->getJD();
+  return sgGetMagVar(geod, jd);
+}
+
diff --git a/src/Navaids/routePath.hxx b/src/Navaids/routePath.hxx
new file mode 100644
index 000000000..d04c03d08
--- /dev/null
+++ b/src/Navaids/routePath.hxx
@@ -0,0 +1,69 @@
+/**
+ * routePath.hxx - convert a route to straight line segments, for graphical
+ * output or display.
+ */
+ 
+// Written by James Turner, started 2010.
+//
+// Copyright (C) 2010  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifndef FG_ROUTE_PATH_HXX
+#define FG_ROUTE_PATH_HXX
+
+#include <Navaids/route.hxx>
+
+namespace flightgear
+{
+  class Hold;
+}
+
+typedef std::vector<SGGeod> SGGeodVec;
+
+class RoutePath
+{
+public:
+  RoutePath(const flightgear::WayptVec& wpts);
+
+  SGGeodVec pathForIndex(int index) const;
+  
+  SGGeod positionForIndex(int index) const;
+  
+private:
+  class PathCtx;
+  
+  SGGeodVec pathForHold(flightgear::Hold* hold) const;
+  
+  bool computedPositionForIndex(int index, SGGeod& pos) const;
+  double computeAltitudeForIndex(int index) const;
+  double computeTrackForIndex(int index) const;
+  
+  /**
+   * Find the distance (in Nm) to climb/descend a height in feet
+   */
+  double distanceForClimb(double climbFt) const;
+  
+  double magVarFor(const SGGeod& gd) const; 
+  
+  flightgear::WayptVec _waypts;
+
+  int _pathClimbFPM; ///< climb-rate to use for pathing
+  int _pathDescentFPM; ///< descent rate to use (feet-per-minute)
+  int _pathIAS; ///< IAS (knots) to use for pathing
+  double _pathTurnRate; ///< degrees-per-second, defaults to 3, i.e 180 in a minute
+};
+
+#endif
diff --git a/src/Navaids/testnavs.cxx b/src/Navaids/testnavs.cxx
index b7215e8c7..d38341aa7 100644
--- a/src/Navaids/testnavs.cxx
+++ b/src/Navaids/testnavs.cxx
@@ -1,3 +1,21 @@
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 #include <simgear/misc/sg_path.hxx>
 
 #include "fixlist.hxx"
diff --git a/src/Navaids/waypoint.cxx b/src/Navaids/waypoint.cxx
new file mode 100644
index 000000000..5992774b1
--- /dev/null
+++ b/src/Navaids/waypoint.cxx
@@ -0,0 +1,471 @@
+// waypoint.cxx - waypoints that can occur in routes/procedures
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "waypoint.hxx"
+
+#include <simgear/structure/exception.hxx>
+#include <simgear/route/waypoint.hxx>
+
+#include <Airports/simple.hxx>
+#include <Airports/runways.hxx>
+
+using std::string;
+
+namespace flightgear
+{
+
+BasicWaypt::BasicWaypt(const SGGeod& aPos, const string& aIdent, Route* aOwner) :
+  Waypt(aOwner),
+  _pos(aPos),
+  _ident(aIdent)
+{
+}
+
+BasicWaypt::BasicWaypt(const SGWayPoint& aWP, Route* aOwner) :
+  Waypt(aOwner),
+  _pos(aWP.get_target()),
+  _ident(aWP.get_id())
+{
+}
+
+BasicWaypt::BasicWaypt(Route* aOwner) :
+  Waypt(aOwner)
+{
+}
+
+void BasicWaypt::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) {
+    throw sg_io_exception("missing lon/lat properties", 
+      "BasicWaypt::initFromProperties");
+  }
+
+  Waypt::initFromProperties(aProp);
+
+  _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), 
+    aProp->getDoubleValue("lat"));
+  _ident = aProp->getStringValue("ident");
+}
+
+void BasicWaypt::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  Waypt::writeToProperties(aProp);
+  
+  aProp->setStringValue("ident", _ident);
+  aProp->setDoubleValue("lon", _pos.getLongitudeDeg());
+  aProp->setDoubleValue("lat", _pos.getLatitudeDeg());
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+NavaidWaypoint::NavaidWaypoint(FGPositioned* aPos, Route* aOwner) :
+  Waypt(aOwner),
+  _navaid(aPos)
+{
+  if (aPos->type() == FGPositioned::RUNWAY) {
+      SG_LOG(SG_GENERAL, SG_WARN, "sure you don't want to be building a runway waypt here?");
+  }
+}
+
+NavaidWaypoint::NavaidWaypoint(Route* aOwner) :
+  Waypt(aOwner)
+{
+}
+
+
+SGGeod NavaidWaypoint::position() const
+{
+  return SGGeod::fromGeodFt(_navaid->geod(), _altitudeFt);
+}  
+ 
+std::string NavaidWaypoint::ident() const
+{
+  return _navaid->ident();
+}
+
+void NavaidWaypoint::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("ident")) {
+    throw sg_io_exception("missing navaid value", 
+      "NavaidWaypoint::initFromProperties");
+  }
+  
+  Waypt::initFromProperties(aProp);
+  
+  std::string idn(aProp->getStringValue("ident"));
+  SGGeod p;
+  if (aProp->hasChild("lon")) {
+    p = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat"));
+  }
+  
+  // FIXME - resolve co-located DME, etc
+  // is it sufficent just to ignore DMEs, actually?
+  FGPositionedRef nav = FGPositioned::findClosestWithIdent(idn, p, NULL);
+  if (!nav) {
+    throw sg_io_exception("unknown navaid ident:" + idn, 
+      "NavaidWaypoint::initFromProperties");
+  }
+  
+  _navaid = nav;
+}
+
+void NavaidWaypoint::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  Waypt::writeToProperties(aProp);
+  
+  aProp->setStringValue("ident", _navaid->ident());
+  // write lon/lat to disambiguate
+  aProp->setDoubleValue("lon", _navaid->geod().getLongitudeDeg());
+  aProp->setDoubleValue("lat", _navaid->geod().getLatitudeDeg());
+}
+
+OffsetNavaidWaypoint::OffsetNavaidWaypoint(FGPositioned* aPos, Route* aOwner,
+  double aRadial, double aDistNm) :
+  NavaidWaypoint(aPos, aOwner),
+  _radial(aRadial),
+  _distanceNm(aDistNm)
+{
+  init();
+}
+
+OffsetNavaidWaypoint::OffsetNavaidWaypoint(Route* aOwner) :
+  NavaidWaypoint(aOwner)
+{
+}
+
+void OffsetNavaidWaypoint::init()
+{
+  SGGeod offset;
+  double az2;
+  SGGeodesy::direct(_navaid->geod(), _radial, _distanceNm * SG_NM_TO_METER, offset, az2);
+  _geod = SGGeod::fromGeodFt(offset, _altitudeFt);
+}
+
+void OffsetNavaidWaypoint::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("radial-deg") || !aProp->hasChild("distance-nm")) {
+    throw sg_io_exception("missing radial/offset distance",
+      "OffsetNavaidWaypoint::initFromProperties");
+  }
+  
+  NavaidWaypoint::initFromProperties(aProp);
+  _radial = aProp->getDoubleValue("radial-deg");
+  _distanceNm = aProp->getDoubleValue("distance-nm");
+  init();
+}
+
+void OffsetNavaidWaypoint::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  NavaidWaypoint::writeToProperties(aProp);
+  aProp->setDoubleValue("radial-deg", _radial);
+  aProp->setDoubleValue("distance-nm", _distanceNm);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+RunwayWaypt::RunwayWaypt(FGRunway* aPos, Route* aOwner) :
+  Waypt(aOwner),
+  _runway(aPos)
+{
+}
+
+RunwayWaypt::RunwayWaypt(Route* aOwner) :
+  Waypt(aOwner)
+{
+}
+
+SGGeod RunwayWaypt::position() const
+{
+  return _runway->threshold();
+}
+  
+std::string RunwayWaypt::ident() const
+{
+  return _runway->airport()->ident() + "-" + _runway->ident();
+}
+
+FGPositioned* RunwayWaypt::source() const
+{
+  return _runway;
+}
+
+void RunwayWaypt::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("icao") || !aProp->hasChild("ident")) {
+    throw sg_io_exception("missing values: icao or ident", 
+      "RunwayWaypoint::initFromProperties");
+  }
+  
+  Waypt::initFromProperties(aProp);
+  std::string idn(aProp->getStringValue("ident"));
+  const FGAirport* apt = FGAirport::getByIdent(aProp->getStringValue("icao"));
+  _runway = apt->getRunwayByIdent(aProp->getStringValue("ident"));
+}
+
+void RunwayWaypt::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  Waypt::writeToProperties(aProp);
+  aProp->setStringValue("ident", _runway->ident());
+  aProp->setStringValue("icao", _runway->airport()->ident());
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+Hold::Hold(const SGGeod& aPos, const string& aIdent, Route* aOwner) :
+  BasicWaypt(aPos, aIdent, aOwner),
+  _righthanded(true),
+  _isDistance(false)
+{
+  setFlag(WPT_DYNAMIC);
+}
+
+Hold::Hold(Route* aOwner) :
+  BasicWaypt(aOwner),
+  _righthanded(true),
+  _isDistance(false)
+{
+}
+
+void Hold::setHoldRadial(double aInboundRadial)
+{
+  _bearing = aInboundRadial;
+}
+
+void Hold::setHoldDistance(double aDistanceNm)
+{
+  _isDistance = true;
+  _holdTD = aDistanceNm;
+}
+
+void Hold::setHoldTime(double aTimeSec)
+{
+  _isDistance = false;
+  _holdTD = aTimeSec;
+}
+
+void Hold::setRightHanded()
+{
+  _righthanded = true;
+}
+
+void Hold::setLeftHanded()
+{
+  _righthanded = false;
+}
+  
+void Hold::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  BasicWaypt::initFromProperties(aProp);
+  
+  if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) {
+    throw sg_io_exception("missing lon/lat properties", 
+      "Hold::initFromProperties");
+  }
+
+  _righthanded = aProp->getBoolValue("right-handed");
+  _isDistance = aProp->getBoolValue("is-distance");
+  _bearing = aProp->getDoubleValue("inbound-radial-deg");
+  _holdTD = aProp->getDoubleValue("td");
+}
+
+void Hold::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  BasicWaypt::writeToProperties(aProp);
+
+  aProp->setBoolValue("right-handed", _righthanded);
+  aProp->setBoolValue("is-distance", _isDistance);
+  aProp->setDoubleValue("inbound-radial-deg", _bearing);
+  aProp->setDoubleValue("td", _holdTD);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+HeadingToAltitude::HeadingToAltitude(Route* aOwner, const string& aIdent, 
+  double aMagHdg) :
+  Waypt(aOwner),
+  _ident(aIdent),
+  _magHeading(aMagHdg)
+{
+  setFlag(WPT_DYNAMIC);
+}
+
+HeadingToAltitude::HeadingToAltitude(Route* aOwner) :
+  Waypt(aOwner)
+{
+}
+
+void HeadingToAltitude::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("heading-deg")) {
+    throw sg_io_exception("missing heading/alt properties", 
+      "HeadingToAltitude::initFromProperties");
+  }
+
+  Waypt::initFromProperties(aProp);
+  _magHeading = aProp->getDoubleValue("heading-deg");
+  _ident = aProp->getStringValue("ident");
+}
+
+void HeadingToAltitude::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  Waypt::writeToProperties(aProp);
+  aProp->setStringValue("ident", _ident);
+  aProp->setDoubleValue("heading-deg", _magHeading);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+DMEIntercept::DMEIntercept(Route* aOwner, const string& aIdent, const SGGeod& aPos,
+    double aCourseDeg, double aDistanceNm) :
+  Waypt(aOwner),
+  _ident(aIdent),
+  _pos(aPos),
+  _magCourse(aCourseDeg),
+  _dmeDistanceNm(aDistanceNm)
+{
+  setFlag(WPT_DYNAMIC);
+}
+
+DMEIntercept::DMEIntercept(Route* aOwner) :
+  Waypt(aOwner)
+{
+}
+
+void DMEIntercept::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) {
+    throw sg_io_exception("missing lon/lat properties", 
+      "DMEIntercept::initFromProperties");
+  }
+
+  Waypt::initFromProperties(aProp);
+  _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat"));
+  _ident = aProp->getStringValue("ident");
+// check it's a real DME?
+  _magCourse = aProp->getDoubleValue("course-deg");
+  _dmeDistanceNm = aProp->getDoubleValue("dme-distance-nm");
+  
+}
+
+void DMEIntercept::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  Waypt::writeToProperties(aProp);
+  
+  aProp->setStringValue("ident", _ident);
+  aProp->setDoubleValue("lon", _pos.getLongitudeDeg());
+  aProp->setDoubleValue("lat", _pos.getLatitudeDeg());
+  aProp->setDoubleValue("course-deg", _magCourse);
+  aProp->setDoubleValue("dme-distance-nm", _dmeDistanceNm);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+RadialIntercept::RadialIntercept(Route* aOwner, const string& aIdent, const SGGeod& aPos,
+    double aCourseDeg, double aRadial) :
+  Waypt(aOwner),
+  _ident(aIdent),
+  _pos(aPos),
+  _magCourse(aCourseDeg),
+  _radial(aRadial)
+{
+  setFlag(WPT_DYNAMIC);
+}
+
+RadialIntercept::RadialIntercept(Route* aOwner) :
+  Waypt(aOwner)
+{
+}
+  
+void RadialIntercept::initFromProperties(SGPropertyNode_ptr aProp)
+{
+  if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) {
+    throw sg_io_exception("missing lon/lat properties", 
+      "RadialIntercept::initFromProperties");
+  }
+
+  Waypt::initFromProperties(aProp);
+  _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat"));
+  _ident = aProp->getStringValue("ident");
+// check it's a real VOR?
+  _magCourse = aProp->getDoubleValue("course-deg");
+  _radial = aProp->getDoubleValue("radial-deg");
+  
+}
+
+void RadialIntercept::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  Waypt::writeToProperties(aProp);
+  
+  aProp->setStringValue("ident", _ident);
+  aProp->setDoubleValue("lon", _pos.getLongitudeDeg());
+  aProp->setDoubleValue("lat", _pos.getLatitudeDeg());
+  aProp->setDoubleValue("course-deg", _magCourse);
+  aProp->setDoubleValue("radial-deg", _radial);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+ATCVectors::ATCVectors(Route* aOwner, FGAirport* aFacility) :
+  Waypt(aOwner),
+  _facility(aFacility)
+{
+  setFlag(WPT_DYNAMIC);
+}
+
+ATCVectors::~ATCVectors()
+{
+}
+
+ATCVectors::ATCVectors(Route* aOwner) :
+  Waypt(aOwner)
+{
+}
+
+SGGeod ATCVectors::position() const
+{
+  return _facility->geod();
+}
+    
+string ATCVectors::ident() const
+{
+  return "VECTORS-" + _facility->ident();
+}
+
+void ATCVectors::initFromProperties(SGPropertyNode_ptr aProp)
+{  
+  if (!aProp->hasChild("icao")) {
+    throw sg_io_exception("missing icao propertie", 
+      "ATCVectors::initFromProperties");
+  }
+
+  Waypt::initFromProperties(aProp);
+  _facility = FGAirport::getByIdent(aProp->getStringValue("icao"));
+}
+
+void ATCVectors::writeToProperties(SGPropertyNode_ptr aProp) const
+{
+  Waypt::writeToProperties(aProp);
+  aProp->setStringValue("icao", _facility->ident());
+}
+
+} // of namespace
diff --git a/src/Navaids/waypoint.hxx b/src/Navaids/waypoint.hxx
new file mode 100644
index 000000000..7b5f30f09
--- /dev/null
+++ b/src/Navaids/waypoint.hxx
@@ -0,0 +1,314 @@
+// waypoint.hxx - waypoints that can occur in routes/procedures
+// Written by James Turner, started 2009.
+//
+// Copyright (C) 2009  Curtis L. Olson
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+#ifndef FG_WAYPOINT_HXX
+#define FG_WAYPOINT_HXX
+
+#include <Navaids/route.hxx>
+#include <Navaids/positioned.hxx>
+
+class FGAirport;
+typedef SGSharedPtr<FGAirport> FGAirportRef;
+class SGWayPoint;
+class FGRunway;
+
+namespace flightgear
+{
+
+
+class BasicWaypt : public Waypt
+{
+public:
+  
+  BasicWaypt(const SGGeod& aPos, const std::string& aIdent, Route* aOwner);
+  
+  BasicWaypt(const SGWayPoint& aWP, Route* aOwner);
+  
+  BasicWaypt(Route* aOwner);
+  
+  virtual SGGeod position() const
+    { return _pos; }
+  
+  virtual std::string ident() const
+    { return _ident; }
+
+protected:
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+
+  virtual std::string type() const
+    { return "basic"; } 
+
+  SGGeod _pos;
+  std::string _ident;
+  
+};
+
+/**
+ * Waypoint based upon a navaid. In practice this means any Positioned
+ * element, excluding runways (see below)
+ */
+class NavaidWaypoint : public Waypt
+{
+public:
+  NavaidWaypoint(FGPositioned* aPos, Route* aOwner);
+  
+  NavaidWaypoint(Route* aOwner);
+  
+  virtual SGGeod position() const;
+  
+  virtual FGPositioned* source() const
+    { return _navaid; }
+    
+  virtual std::string ident() const;
+protected:	
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+
+  virtual std::string type() const
+    { return "navaid"; }
+    
+  FGPositionedRef _navaid;
+};
+
+class OffsetNavaidWaypoint : public NavaidWaypoint
+{
+public:	
+  OffsetNavaidWaypoint(FGPositioned* aPos, Route* aOwner, double aRadial, double aDistNm);
+
+  OffsetNavaidWaypoint(Route* aOwner);
+  
+  virtual SGGeod position() const
+    { return _geod; }
+
+protected:
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+  
+  virtual std::string type() const
+    { return "offset-navaid"; }
+    
+private:
+  void init();
+  
+  SGGeod _geod;
+  double _radial; // true, degrees
+  double _distanceNm;
+};
+
+/**
+ * Waypoint based upon a runway. 
+ * Runways are handled specially in various places, so it's cleaner
+ * to be able to distuinguish them from other navaid waypoints
+ */
+class RunwayWaypt : public Waypt
+{
+public:
+  RunwayWaypt(FGRunway* aPos, Route* aOwner);
+  
+  RunwayWaypt(Route* aOwner);
+  
+  virtual SGGeod position() const;
+  
+  virtual FGPositioned* source() const;
+    
+  virtual std::string ident() const;
+
+  FGRunway* runway() const
+    { return _runway; }
+
+protected:	
+  virtual std::string type() const
+    { return "runway"; }
+  
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+
+private:
+  FGRunway* _runway;
+};
+
+class Hold : public BasicWaypt
+{
+public:
+  Hold(const SGGeod& aPos, const std::string& aIdent, Route* aOwner);
+  
+  Hold(Route* aOwner);
+  
+  void setHoldRadial(double aInboundRadial);
+  void setHoldDistance(double aDistanceNm);
+  void setHoldTime(double aTimeSec);
+  
+  void setRightHanded();
+  void setLeftHanded();
+  
+  double inboundRadial() const
+  { return _bearing; }
+  
+  bool isLeftHanded() const
+  { return !_righthanded; }
+  
+  bool isDistance() const
+  { return _isDistance; }
+  
+  double timeOrDistance() const
+  { return _holdTD;}
+  
+protected:
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+  
+  virtual std::string type() const
+    { return "hold"; }
+    
+private:
+  double _bearing;
+  bool _righthanded;
+  bool _isDistance;
+  double _holdTD;
+};
+
+class HeadingToAltitude : public Waypt
+{
+public:
+  HeadingToAltitude(Route* aOwner, const std::string& aIdent, double aMagHdg);
+  
+  HeadingToAltitude(Route* aOwner);
+  
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+  
+  virtual std::string type() const
+    { return "hdgToAlt"; }
+
+  virtual SGGeod position() const
+    { return SGGeod(); }
+    
+  virtual std::string ident() const
+    { return _ident; }
+    
+  double headingDegMagnetic() const
+    { return _magHeading; }
+  
+private:
+  std::string _ident;
+  double _magHeading;
+};
+
+class DMEIntercept : public Waypt
+{
+public:
+  DMEIntercept(Route* aOwner, const std::string& aIdent, const SGGeod& aPos,
+    double aCourseDeg, double aDistanceNm);
+  
+  DMEIntercept(Route* aOwner);
+  
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+  
+  virtual std::string type() const
+    { return "dmeIntercept"; }
+
+  virtual SGGeod position() const
+    { return _pos; }
+    
+  virtual std::string ident() const
+    { return _ident; }
+  
+  double courseDegMagnetic() const
+    { return _magCourse; }
+    
+  double dmeDistanceNm() const
+    { return _dmeDistanceNm; }
+    
+private:
+  std::string _ident;
+  SGGeod _pos;
+  double _magCourse;
+  double _dmeDistanceNm;
+};
+
+class RadialIntercept : public Waypt
+{
+public:
+  RadialIntercept(Route* aOwner, const std::string& aIdent, const SGGeod& aPos,
+    double aCourseDeg, double aRadialDeg);
+  
+  RadialIntercept(Route* aOwner);
+  
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+  
+  virtual std::string type() const
+    { return "radialIntercept"; }
+
+  virtual SGGeod position() const
+    { return _pos; }
+    
+  virtual std::string ident() const
+    { return _ident; }
+  
+  double courseDegMagnetic() const
+    { return _magCourse; }
+    
+  double radialDegMagnetic() const
+    { return _radial; }
+    
+private:
+  std::string _ident;
+  SGGeod _pos;
+  double _magCourse;
+  double _radial;
+};
+
+
+/** 
+ * Represent ATC radar vectored segment. Common at the end of published
+ * missed approach procedures, and from STAR arrival points to final approach
+ */
+class ATCVectors : public Waypt
+{
+public:
+  ATCVectors(Route* aOwner, FGAirport* aFacility);
+  virtual ~ATCVectors();
+  
+  ATCVectors(Route* aOwner);
+  
+  virtual void initFromProperties(SGPropertyNode_ptr aProp);
+  virtual void writeToProperties(SGPropertyNode_ptr aProp) const;
+  
+  virtual std::string type() const
+    { return "vectors"; }
+
+  virtual SGGeod position() const;
+    
+  virtual std::string ident() const;
+  
+private:
+  /**
+   * ATC facility. Using an airport here is incorrect, since often arrivals
+   * facilities will be shared between several nearby airports, but it
+   * suffices until we have a proper facility representation
+   */
+  FGAirportRef _facility;
+};  
+  
+} // of namespace flighgear
+
+#endif // of FG_WAYPOINT_HXX
diff --git a/src/Scripting/NasalSys.cxx b/src/Scripting/NasalSys.cxx
index ae5d9c0af..17fdb67d5 100644
--- a/src/Scripting/NasalSys.cxx
+++ b/src/Scripting/NasalSys.cxx
@@ -33,6 +33,7 @@
 #include <Main/util.hxx>
 #include <Scenery/scenery.hxx>
 #include <Navaids/navrecord.hxx>
+#include <Navaids/procedure.hxx>
 
 #include "NasalSys.hxx"
 
@@ -613,6 +614,28 @@ static naRef f_airportinfo(naContext c, naRef me, int argc, naRef* args)
           HASHSET("ils_frequency_mhz", 17, naNum(rwy->ILS()->get_freq() / 100.0));
         }
         
+        std::vector<flightgear::SID*> sids(rwy->getSIDs());
+        naRef sidVec = naNewVector(c);
+        
+        for (unsigned int s=0; s < sids.size(); ++s) {
+          naRef procId = naStr_fromdata(naNewString(c),
+                    const_cast<char *>(sids[s]->ident().c_str()),
+                    sids[s]->ident().length());
+          naVec_append(sidVec, procId);
+        }
+        HASHSET("sids", 4, sidVec); 
+        
+        std::vector<flightgear::STAR*> stars(rwy->getSTARs());
+        naRef starVec = naNewVector(c);
+      
+        for (unsigned int s=0; s < stars.size(); ++s) {
+          naRef procId = naStr_fromdata(naNewString(c),
+                    const_cast<char *>(stars[s]->ident().c_str()),
+                    stars[s]->ident().length());
+          naVec_append(starVec, procId);
+        }
+        HASHSET("stars", 5, starVec); 
+
 #undef HASHSET
         naHash_set(rwys, rwyid, rwydata);
     }

From 3fe6209c2017474db28786702215c7404c8a3ebd Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 20 Oct 2010 09:09:29 +0100
Subject: [PATCH 23/45] VS2008 project updates.

---
 projects/VC90/FlightGear/FlightGear.vcproj | 48 ++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/projects/VC90/FlightGear/FlightGear.vcproj b/projects/VC90/FlightGear/FlightGear.vcproj
index d8011106c..e97cba54f 100644
--- a/projects/VC90/FlightGear/FlightGear.vcproj
+++ b/projects/VC90/FlightGear/FlightGear.vcproj
@@ -4203,6 +4203,46 @@
 				RelativePath="..\..\..\src\Navaids\positioned.hxx"
 				>
 			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\airways.hxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\airways.cxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\procedure.hxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\procedure.cxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\route.cxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\route.hxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\routePath.hxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\routePath.cxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\waypoint.cxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Navaids\waypoint.hxx"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Lib_Network"
@@ -4855,6 +4895,14 @@
 				RelativePath="..\..\..\src\Instrumentation\gps.hxx"
 				>
 			</File>
+			<File
+				RelativePath="..\..\..\src\Instrumentation\rnav_waypt_controller.cxx"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\src\Instrumentation\rnav_waypt_controller.hxx"
+				>
+			</File>
 			<File
 				RelativePath="..\..\..\src\Instrumentation\groundradar.cxx"
 				>

From 308fd1b11216f5d7e4bba350a7d798a33f06e70a Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 20 Oct 2010 11:48:06 +0100
Subject: [PATCH 24/45] Automake build fixes for airways commit.

---
 src/Instrumentation/Makefile.am               | 6 +++---
 src/Instrumentation/gps.hxx                   | 1 +
 src/Instrumentation/rnav_waypt_controller.cxx | 2 ++
 src/Navaids/Makefile.am                       | 1 +
 src/Navaids/procedure.cxx                     | 3 +++
 5 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/Instrumentation/Makefile.am b/src/Instrumentation/Makefile.am
index 136929dc7..f519f99a0 100644
--- a/src/Instrumentation/Makefile.am
+++ b/src/Instrumentation/Makefile.am
@@ -31,8 +31,8 @@ libInstrumentation_a_SOURCES = \
 	tacan.cxx tacan.hxx mk_viii.cxx mk_viii.hxx \
 	dclgps.cxx dclgps.hxx \
 	render_area_2d.cxx render_area_2d.hxx        \
-		groundradar.cxx groundradar.hxx \
-		agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx \
-	rnav_waypt_controller.cxx rnav_waypt_controller.hxx \
+	groundradar.cxx groundradar.hxx \
+	agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx \
+	rnav_waypt_controller.cxx rnav_waypt_controller.hxx
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(top_builddir)/src
diff --git a/src/Instrumentation/gps.hxx b/src/Instrumentation/gps.hxx
index 3005997c0..f69a70a76 100644
--- a/src/Instrumentation/gps.hxx
+++ b/src/Instrumentation/gps.hxx
@@ -8,6 +8,7 @@
 #define __INSTRUMENTS_GPS_HXX 1
 
 #include <cassert>
+#include <memory>
 
 #include <simgear/props/props.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
diff --git a/src/Instrumentation/rnav_waypt_controller.cxx b/src/Instrumentation/rnav_waypt_controller.cxx
index fbdb5eeb1..977452e18 100644
--- a/src/Instrumentation/rnav_waypt_controller.cxx
+++ b/src/Instrumentation/rnav_waypt_controller.cxx
@@ -19,6 +19,8 @@
 
 #include "rnav_waypt_controller.hxx"
 
+#include <cassert>
+
 #include <simgear/sg_inlines.h>
 #include <simgear/structure/exception.hxx>
 
diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am
index 66c650045..30016afe3 100644
--- a/src/Navaids/Makefile.am
+++ b/src/Navaids/Makefile.am
@@ -14,6 +14,7 @@ libNavaids_a_SOURCES = \
 	route.hxx route.cxx \
 	waypoint.hxx waypoint.cxx \
 	procedure.hxx procedure.cxx \
+	awynet.cxx awynet.hxx
 
 #
 # testnavs_SOURCES = testnavs.cxx
diff --git a/src/Navaids/procedure.cxx b/src/Navaids/procedure.cxx
index 4080f0a75..5104f4c75 100644
--- a/src/Navaids/procedure.cxx
+++ b/src/Navaids/procedure.cxx
@@ -19,6 +19,9 @@
 
 #include "procedure.hxx"
 
+#include <cassert>
+#include <algorithm> // for reverse_copy
+
 #include <simgear/structure/exception.hxx>
 
 #include <Navaids/waypoint.hxx>

From fe167327831067005b275593ba388ea676231025 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 20 Oct 2010 13:13:05 +0100
Subject: [PATCH 25/45] Fix Win32 compilation - avoid SID name clash with
 windows.h

---
 src/Airports/simple.cxx     | 10 +++++-----
 src/Autopilot/route_mgr.cxx |  4 ++--
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/Airports/simple.cxx b/src/Airports/simple.cxx
index f563cf1d0..c7e486f45 100644
--- a/src/Airports/simple.cxx
+++ b/src/Airports/simple.cxx
@@ -511,13 +511,13 @@ bool FGAirport::buildApproach(Waypt* aEnroute, STAR* aSTAR, FGRunway* aRwy, Wayp
   return aps.front()->routeFromVectors(aRoute);
 }
 
-pair<SID*, WayptRef>
+pair<flightgear::SID*, WayptRef>
 FGAirport::selectSID(const SGGeod& aDest, FGRunway* aRwy)
 {
   loadProcedures();
   
   WayptRef enroute;
-  SID* sid = NULL;
+  flightgear::SID* sid = NULL;
   double d = 1e9;
   
   for (unsigned int i=0; i<mSIDs.size(); ++i) {
@@ -580,7 +580,7 @@ FGAirport::selectSTAR(const SGGeod& aOrigin, FGRunway* aRwy)
 }
 
 
-void FGAirport::addSID(SID* aSid)
+void FGAirport::addSID(flightgear::SID* aSid)
 {
   mSIDs.push_back(aSid);
 }
@@ -601,13 +601,13 @@ unsigned int FGAirport::numSIDs() const
   return mSIDs.size();
 }
 
-SID* FGAirport::getSIDByIndex(unsigned int aIndex) const
+flightgear::SID* FGAirport::getSIDByIndex(unsigned int aIndex) const
 {
   loadProcedures();
   return mSIDs[aIndex];
 }
 
-SID* FGAirport::findSIDWithIdent(const std::string& aIdent) const
+flightgear::SID* FGAirport::findSIDWithIdent(const std::string& aIdent) const
 {
   loadProcedures();
   for (unsigned int i=0; i<mSIDs.size(); ++i) {
diff --git a/src/Autopilot/route_mgr.cxx b/src/Autopilot/route_mgr.cxx
index 1896946fc..fac7dc628 100644
--- a/src/Autopilot/route_mgr.cxx
+++ b/src/Autopilot/route_mgr.cxx
@@ -468,7 +468,7 @@ void FGRouteMgr::autoRoute()
     
   _route.clear(); // clear out the existing, first
 // SID
-  SID* sid;
+  flightgear::SID* sid;
   WayptRef sidTrans;
   
   boost::tie(sid, sidTrans) = _departure->selectSID(_destination->geod(), runway);
@@ -569,7 +569,7 @@ void FGRouteMgr::buildDeparture(WayptRef enroute, WayptVec& wps)
   
   FGRunway* r = _departure->getRunwayByIdent(runwayId);
   string sidId = departure->getStringValue("sid");
-  SID* sid = _departure->findSIDWithIdent(sidId);
+  flightgear::SID* sid = _departure->findSIDWithIdent(sidId);
   if (!sid) {
 // valid runway, but no SID selected/found, so just the runway node for now
     if (!sidId.empty() && (sidId != "(none)")) {

From f5c2c630ebe3599f2b72dc4e0bca2ad427767b80 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 20 Oct 2010 17:54:16 +0100
Subject: [PATCH 26/45] Remove references to old (unused) airways code

---
 src/AIModel/AIAircraft.cxx                 |  1 +
 src/AIModel/AIFlightPlan.hxx               | 65 ++++++++++------------
 src/AIModel/AIFlightPlanCreate.cxx         |  1 +
 src/AIModel/AIFlightPlanCreateCruise.cxx   |  5 +-
 src/AIModel/AIFlightPlanCreatePushBack.cxx |  2 +
 src/ATC/trafficcontrol.cxx                 |  2 +-
 src/Airports/groundnetwork.cxx             |  1 +
 src/Airports/sidstar.hxx                   | 13 ++---
 src/Main/fg_init.cxx                       | 12 +---
 src/Main/globals.cxx                       |  6 +-
 src/Main/globals.hxx                       |  6 --
 src/Navaids/Makefile.am                    |  3 +-
 12 files changed, 47 insertions(+), 70 deletions(-)

diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx
index f117810c1..a525d7ef1 100644
--- a/src/AIModel/AIAircraft.cxx
+++ b/src/AIModel/AIAircraft.cxx
@@ -29,6 +29,7 @@
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <Airports/dynamics.hxx>
+#include <Airports/simple.hxx>
 
 #include <string>
 #include <math.h>
diff --git a/src/AIModel/AIFlightPlan.hxx b/src/AIModel/AIFlightPlan.hxx
index 1de5658bd..fd3968305 100644
--- a/src/AIModel/AIFlightPlan.hxx
+++ b/src/AIModel/AIFlightPlan.hxx
@@ -24,26 +24,18 @@
 #include <string>
 
 
-#include <Airports/simple.hxx>
-#include <Navaids/awynet.hxx>
-
-#include "AIBase.hxx"
-
-
-
-using std::vector;
-using std::string;
-
 class FGTaxiRoute;
 class FGRunway;
 class FGAIAircraft;
+class FGAirport;
+class SGGeod;
 
 class FGAIFlightPlan {
 
 public:
 
   typedef struct {
-   string name;
+   std::string name;
    double latitude;
    double longitude;
    double altitude;
@@ -56,11 +48,11 @@ public:
     int routeIndex;  // For AI/ATC purposes;
    double time_sec;
    double trackLength; // distance from previous waypoint (for AI purposes);
-   string time;
+   std::string time;
 
   } waypoint;
   FGAIFlightPlan();
-  FGAIFlightPlan(const string& filename);
+  FGAIFlightPlan(const std::string& filename);
   FGAIFlightPlan(FGAIAircraft *,
                  const std::string& p,
 		 double course,
@@ -73,9 +65,9 @@ public:
                  double lat,
                  double lon,
                  double speed,
-		 const string& fltType,
-		 const string& acType,
-		 const string& airline);
+		 const std::string& fltType,
+		 const std::string& acType,
+		 const std::string& airline);
    ~FGAIFlightPlan();
 
    waypoint* const getPreviousWaypoint( void ) const;
@@ -91,18 +83,18 @@ public:
    double getLeadDistance( void ) const {return lead_distance;}
    double getBearing(waypoint* previous, waypoint* next) const;
    double getBearing(double lat, double lon, waypoint* next) const;
-   double checkTrackLength(string wptName);
+   double checkTrackLength(std::string wptName);
   time_t getStartTime() const { return start_time; }
    time_t getArrivalTime() const { return arrivalTime; }
 
   void    create(FGAIAircraft *, FGAirport *dep, FGAirport *arr, int leg, double alt, double speed, double lat, double lon,
-		 bool firstLeg, double radius, const string& fltType, const string& aircraftType, const string& airline, double distance);
+		 bool firstLeg, double radius, const std::string& fltType, const std::string& aircraftType, const std::string& airline, double distance);
 
   void setLeg(int val) { leg = val;}
   void setTime(time_t st) { start_time = st; }
   int getGate() const { return gateId; }
   double getLeadInAngle() const { return leadInAngle; }
-  const string& getRunway() const;
+  const std::string& getRunway() const;
   
   void setRepeat(bool r) { repeat = r; }
   bool getRepeat(void) const { return repeat; }
@@ -111,16 +103,16 @@ public:
   int getRouteIndex(int i); // returns the AI related index of this current routes. 
   FGTaxiRoute *getTaxiRoute() { return taxiRoute; }
   void deleteTaxiRoute();
-  string getRunway() { return activeRunway; }
+  std::string getRunway() { return activeRunway; }
   bool isActive(time_t time) {return time >= this->getStartTime();}
 
-  void setRunway(string rwy) { activeRunway = rwy; };
-  string getRunwayClassFromTrafficType(string fltType);
+  void setRunway(std::string rwy) { activeRunway = rwy; };
+  std::string getRunwayClassFromTrafficType(std::string fltType);
 
   void addWaypoint(waypoint* wpt) { waypoints.push_back(wpt); };
 
-  void setName(string n) { name = n; };
-  string getName() { return name; };
+  void setName(std::string n) { name = n; };
+  std::string getName() { return name; };
 
   void setSID(FGAIFlightPlan* fp) { sid = fp;};
   FGAIFlightPlan* getSID() { return sid; };
@@ -128,7 +120,7 @@ public:
 private:
   FGRunway* rwy;
   FGAIFlightPlan *sid;
-  typedef vector <waypoint*> wpt_vector_type;
+  typedef std::vector <waypoint*> wpt_vector_type;
   typedef wpt_vector_type::const_iterator wpt_vector_iterator;
 
 
@@ -143,26 +135,25 @@ private:
   time_t arrivalTime;       // For AI/ATC purposes.
   int leg;
   int gateId, lastNodeVisited;
-  string activeRunway;
-  FGAirRoute airRoute;
+  std::string activeRunway;
   FGTaxiRoute *taxiRoute;
-  string name;
+  std::string name;
 
-  void createPushBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const string&, const string&, const string&);
-  void createPushBackFallBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const string&, const string&, const string&);
-  void createTakeOff(FGAIAircraft *, bool, FGAirport *, double, const string&);
-  void createClimb(FGAIAircraft *, bool, FGAirport *, double, double, const string&);
-  void createCruise(FGAIAircraft *, bool, FGAirport*, FGAirport*, double, double, double, double, const string&);
-  void createDescent(FGAIAircraft *, FGAirport *,  double latitude, double longitude, double speed, double alt,const string&, double distance);
-  void createLanding(FGAIAircraft *, FGAirport *, const string&);
+  void createPushBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const std::string&, const std::string&, const std::string&);
+  void createPushBackFallBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const std::string&, const std::string&, const std::string&);
+  void createTakeOff(FGAIAircraft *, bool, FGAirport *, double, const std::string&);
+  void createClimb(FGAIAircraft *, bool, FGAirport *, double, double, const std::string&);
+  void createCruise(FGAIAircraft *, bool, FGAirport*, FGAirport*, double, double, double, double, const std::string&);
+  void createDescent(FGAIAircraft *, FGAirport *,  double latitude, double longitude, double speed, double alt,const std::string&, double distance);
+  void createLanding(FGAIAircraft *, FGAirport *, const std::string&);
   void createParking(FGAIAircraft *, FGAirport *, double radius);
   void deleteWaypoints(); 
   void resetWaypoints();
 
-  void createLandingTaxi(FGAIAircraft *, FGAirport *apt, double radius, const string& fltType, const string& acType, const string& airline);
+  void createLandingTaxi(FGAIAircraft *, FGAirport *apt, double radius, const std::string& fltType, const std::string& acType, const std::string& airline);
   void createDefaultLandingTaxi(FGAIAircraft *, FGAirport* aAirport);
   void createDefaultTakeoffTaxi(FGAIAircraft *, FGAirport* aAirport, FGRunway* aRunway);
-  void createTakeoffTaxi(FGAIAircraft *, bool firstFlight, FGAirport *apt, double radius, const string& fltType, const string& acType, const string& airline);
+  void createTakeoffTaxi(FGAIAircraft *, bool firstFlight, FGAirport *apt, double radius, const std::string& fltType, const std::string& acType, const std::string& airline);
 
   double getTurnRadius(double, bool);
         
diff --git a/src/AIModel/AIFlightPlanCreate.cxx b/src/AIModel/AIFlightPlanCreate.cxx
index 790de6923..a0a396d8f 100644
--- a/src/AIModel/AIFlightPlanCreate.cxx
+++ b/src/AIModel/AIFlightPlanCreate.cxx
@@ -27,6 +27,7 @@
 #include <simgear/props/props.hxx>
 #include <simgear/props/props_io.hxx>
 
+#include <Airports/simple.hxx>
 #include <Airports/runways.hxx>
 #include <Airports/dynamics.hxx>
 #include "AIAircraft.hxx"
diff --git a/src/AIModel/AIFlightPlanCreateCruise.cxx b/src/AIModel/AIFlightPlanCreateCruise.cxx
index 269acda94..1932de9ce 100644
--- a/src/AIModel/AIFlightPlanCreateCruise.cxx
+++ b/src/AIModel/AIFlightPlanCreateCruise.cxx
@@ -27,7 +27,7 @@
 #include <iostream>
 #include <simgear/route/waypoint.hxx>
 
-#include <Navaids/awynet.hxx>
+#include <Airports/simple.hxx>
 #include <Airports/runways.hxx>
 #include <Airports/dynamics.hxx>
 
@@ -40,6 +40,7 @@
 
 using std::iostream;
 
+/*
 void FGAIFlightPlan::evaluateRoutePart(double deplat,
 				       double deplon,
 				       double arrlat,
@@ -97,7 +98,7 @@ void FGAIFlightPlan::evaluateRoutePart(double deplat,
 	}
 }
 
-
+*/
 /*
 void FGAIFlightPlan::createCruise(bool firstFlight, FGAirport *dep,
 				  FGAirport *arr, double latitude,
diff --git a/src/AIModel/AIFlightPlanCreatePushBack.cxx b/src/AIModel/AIFlightPlanCreatePushBack.cxx
index d97e30da2..34f21a1fc 100644
--- a/src/AIModel/AIFlightPlanCreatePushBack.cxx
+++ b/src/AIModel/AIFlightPlanCreatePushBack.cxx
@@ -23,6 +23,8 @@
 #endif
 
 #include <simgear/math/sg_geodesy.hxx>
+
+#include <Airports/simple.hxx>
 #include <Airports/runways.hxx>
 #include <Airports/dynamics.hxx>
 
diff --git a/src/ATC/trafficcontrol.cxx b/src/ATC/trafficcontrol.cxx
index 53ddf28b5..8079933b1 100644
--- a/src/ATC/trafficcontrol.cxx
+++ b/src/ATC/trafficcontrol.cxx
@@ -34,7 +34,7 @@
 #include <Traffic/TrafficMgr.hxx>
 #include <Airports/groundnetwork.hxx>
 #include <Airports/dynamics.hxx>
-
+#include <Airports/simple.hxx>
 
 using std::sort;
 
diff --git a/src/Airports/groundnetwork.cxx b/src/Airports/groundnetwork.cxx
index 3d96ccf7d..2fb8127a5 100644
--- a/src/Airports/groundnetwork.cxx
+++ b/src/Airports/groundnetwork.cxx
@@ -30,6 +30,7 @@
 #include <simgear/debug/logstream.hxx>
 #include <simgear/route/waypoint.hxx>
 
+#include <Airports/simple.hxx>
 #include <Airports/dynamics.hxx>
 
 #include <AIModel/AIAircraft.hxx>
diff --git a/src/Airports/sidstar.hxx b/src/Airports/sidstar.hxx
index ef388e49b..ad8d10e94 100644
--- a/src/Airports/sidstar.hxx
+++ b/src/Airports/sidstar.hxx
@@ -24,6 +24,7 @@
 #define _SIDSTAR_HXX_
 
 #include <string>
+#include <map>
 
 #include <simgear/misc/sg_path.hxx>
 
@@ -36,12 +37,10 @@
 #include "runwayprefs.hxx"
 
 
-using std::string;
-
 class FGAirport;
 
-typedef vector<FGAIFlightPlan*>           FlightPlanVec;
-typedef vector<FGAIFlightPlan*>::iterator FlightPlanVecIterator;
+typedef std::vector<FGAIFlightPlan*>           FlightPlanVec;
+typedef std::vector<FGAIFlightPlan*>::iterator FlightPlanVecIterator;
 
 typedef std::map < std::string, FlightPlanVec > FlightPlanVecMap;
 
@@ -49,7 +48,7 @@ typedef std::map < std::string, FlightPlanVec > FlightPlanVecMap;
 class FGSidStar 
 {
    private:
-      string id;
+      std::string id;
       bool initialized;
       FlightPlanVecMap data;
 
@@ -57,9 +56,9 @@ class FGSidStar
       FGSidStar(FGAirport *ap);
       FGSidStar(const FGSidStar &other);
 
-      string getId() { return id; };
+      std::string getId() { return id; };
       void load(SGPath path);
-      FGAIFlightPlan *getBest(string activeRunway, double heading);
+      FGAIFlightPlan *getBest(std::string activeRunway, double heading);
 };
 
 
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index 184e5623a..fa2cc45a5 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -58,6 +58,8 @@
 #include <simgear/structure/event_mgr.hxx>
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/misc/sg_dir.hxx>
+#include <simgear/misc/sgstream.hxx>
+
 #include <simgear/misc/interpolator.hxx>
 #include <simgear/scene/material/matlib.hxx>
 #include <simgear/scene/model/particles.hxx>
@@ -1072,16 +1074,6 @@ fgInitNav ()
     fixlist.init( p_fix );  // adds fixes to the DB in positioned.cxx
 
     SG_LOG(SG_GENERAL, SG_INFO, "  Airways");
- #if 0 
-      SGPath p_awy( globals->get_fg_root() );
-    p_awy.append( "Navaids/awy.dat" );
-    FGAirwayNetwork *awyNet = new FGAirwayNetwork;
-    //cerr << "Loading Airways" << endl;
-    awyNet->load (p_awy );
-    awyNet->init();
-    //cerr << "initializing airways" << endl;
-    globals->set_airwaynet( awyNet );
-#endif
     flightgear::Airway::load();
     
     return true;
diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx
index a5eb32563..7fafd0516 100644
--- a/src/Main/globals.cxx
+++ b/src/Main/globals.cxx
@@ -45,7 +45,6 @@
 #include <Model/acmodel.hxx>
 #include <Model/modelmgr.hxx>
 #include <MultiPlayer/multiplaymgr.hxx>
-#include <Navaids/awynet.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <Navaids/navlist.hxx>
@@ -149,9 +148,7 @@ FGGlobals::FGGlobals() :
     dmelist( NULL ),
     tacanlist( NULL ),
     carrierlist( NULL ),
-    channellist( NULL ),
-    airwaynet( NULL )
-    
+    channellist( NULL )    
 {
   simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider());
 }
@@ -199,7 +196,6 @@ FGGlobals::~FGGlobals()
     delete tacanlist;
     delete carrierlist;
     delete channellist;
-    delete airwaynet;
 
     soundmgr->unbind();
     delete soundmgr;
diff --git a/src/Main/globals.hxx b/src/Main/globals.hxx
index 50bd24e67..097e3acb5 100644
--- a/src/Main/globals.hxx
+++ b/src/Main/globals.hxx
@@ -60,7 +60,6 @@ class FGAircraftModel;
 class FGControls;
 class FGFlightPlanDispatcher;
 class FGNavList;
-class FGAirwayNetwork;
 class FGTACANList;
 class FGModelMgr;
 class FGRouteMgr;
@@ -171,7 +170,6 @@ private:
     FGNavList *tacanlist;
     FGNavList *carrierlist;
     FGTACANList *channellist;
-    FGAirwayNetwork *airwaynet;
 
     /// roots of Aircraft trees
     string_list fg_aircraft_dirs;
@@ -322,10 +320,6 @@ public:
     inline FGTACANList *get_channellist() const { return channellist; }
     inline void set_channellist( FGTACANList *c ) { channellist = c; }
 
-    inline FGAirwayNetwork *get_airwaynet() const { return airwaynet; }
-    inline void set_airwaynet( FGAirwayNetwork *a ) { airwaynet = a; }
-
-
    /**
      * Save the current state as the initial state.
      */
diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am
index 30016afe3..93985cacf 100644
--- a/src/Navaids/Makefile.am
+++ b/src/Navaids/Makefile.am
@@ -13,8 +13,7 @@ libNavaids_a_SOURCES = \
 	airways.hxx airways.cxx \
 	route.hxx route.cxx \
 	waypoint.hxx waypoint.cxx \
-	procedure.hxx procedure.cxx \
-	awynet.cxx awynet.hxx
+	procedure.hxx procedure.cxx
 
 #
 # testnavs_SOURCES = testnavs.cxx

From d573cb43a032c8c4223152c1cf04642c2eb53b0f Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Fri, 22 Oct 2010 12:22:00 +0100
Subject: [PATCH 27/45] Move three more subsystems into the init + update
 scheme - fixes some crashes found by papillion.

---
 src/Autopilot/route_mgr.cxx            |  2 +-
 src/Cockpit/hud_rwy.cxx                | 14 --------
 src/Instrumentation/HUD/HUD_runway.cxx | 14 --------
 src/Main/fg_init.cxx                   | 47 ++++++++++++++++++--------
 src/Main/globals.cxx                   |  4 ---
 src/Main/main.cxx                      | 32 ------------------
 src/Main/viewmgr.cxx                   | 32 +++++++++++++-----
 src/Main/viewmgr.hxx                   | 12 ++++---
 8 files changed, 63 insertions(+), 94 deletions(-)

diff --git a/src/Autopilot/route_mgr.cxx b/src/Autopilot/route_mgr.cxx
index fac7dc628..d5411b8af 100644
--- a/src/Autopilot/route_mgr.cxx
+++ b/src/Autopilot/route_mgr.cxx
@@ -237,7 +237,7 @@ void FGRouteMgr::postinit()
     SG_LOG(SG_AUTOPILOT, SG_INFO, "loaded initial waypoints:" << _route.size());
   }
 
-  weightOnWheels = fgGetNode("/gear/gear[0]/wow", false);
+  weightOnWheels = fgGetNode("/gear/gear[0]/wow", true);
   // check airbone flag agrees with presets
 }
 
diff --git a/src/Cockpit/hud_rwy.cxx b/src/Cockpit/hud_rwy.cxx
index e884c7cfb..222975fdb 100644
--- a/src/Cockpit/hud_rwy.cxx
+++ b/src/Cockpit/hud_rwy.cxx
@@ -97,11 +97,6 @@ void runway_instr::draw()
         double sPitch = sin(pitch), cPitch = cos(pitch),
                sYaw = sin(yaw), cYaw = cos(yaw);
 
-        //Assuming that the "Cockpit View" is always at position zero!!!
-        if (curr_view_id != 0) {
-            globals->get_viewmgr()->set_view(0);
-            globals->get_viewmgr()->copyToCurrent();
-        }
         //Set the camera to the cockpit view to get the view of the runway from the cockpit
         // OSGFIXME
 //         ssgSetCamera((sgVec4 *)cockpit_view->get_VIEW());
@@ -156,15 +151,6 @@ void runway_instr::draw()
             drawArrow(); //draw indication arrow
         }
 
-        //Restore the current view and any offsets
-        if (curr_view_id != 0) {
-            globals->get_viewmgr()->set_view(curr_view_id);
-            globals->get_viewmgr()->copyToCurrent();
-            curr_view->setHeadingOffset_deg(ho);
-            curr_view->setPitchOffset_deg(po);
-            curr_view->setGoalHeadingOffset_deg(gho);
-            curr_view->setGoalPitchOffset_deg(gpo);
-        }
         //Set the camera back to the current view
         // OSGFIXME
 //         ssgSetCamera((sgVec4 *)curr_view);
diff --git a/src/Instrumentation/HUD/HUD_runway.cxx b/src/Instrumentation/HUD/HUD_runway.cxx
index a31d0ff60..fcf4f1127 100644
--- a/src/Instrumentation/HUD/HUD_runway.cxx
+++ b/src/Instrumentation/HUD/HUD_runway.cxx
@@ -93,11 +93,6 @@ void HUD::Runway::draw()
     double sPitch = sin(pitch), cPitch = cos(pitch),
            sYaw = sin(yaw), cYaw = cos(yaw);
 
-    //Assuming that the "Cockpit View" is always at position zero!!!
-    if (curr_view_id != 0) {
-        globals->get_viewmgr()->set_view(0);
-        globals->get_viewmgr()->copyToCurrent();
-    }
     //Set the camera to the cockpit view to get the view of the runway from the cockpit
     // OSGFIXME
 //     ssgSetCamera((sgVec4 *)_cockpit_view->get_VIEW());
@@ -152,15 +147,6 @@ void HUD::Runway::draw()
         drawArrow(); //draw indication arrow
     }
 
-    //Restore the current view and any offsets
-    if (curr_view_id != 0) {
-        globals->get_viewmgr()->set_view(curr_view_id);
-        globals->get_viewmgr()->copyToCurrent();
-        curr_view->setHeadingOffset_deg(ho);
-        curr_view->setPitchOffset_deg(po);
-        curr_view->setGoalHeadingOffset_deg(gho);
-        curr_view->setGoalPitchOffset_deg(gpo);
-    }
     //Set the camera back to the current view
     // OSGFIXME
 //     ssgSetCamera((sgVec4 *)curr_view);
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index fa2cc45a5..f154ab658 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -93,6 +93,7 @@
 #include <Input/input.hxx>
 #include <Instrumentation/instrument_mgr.hxx>
 #include <Model/acmodel.hxx>
+#include <Model/modelmgr.hxx>
 #include <AIModel/submodel.hxx>
 #include <AIModel/AIManager.hxx>
 #include <Navaids/navdb.hxx>
@@ -1309,9 +1310,6 @@ bool fgInitSubsystems() {
     // Initialize the scenery management subsystem.
     ////////////////////////////////////////////////////////////////////
 
-    globals->add_subsystem("tile-manager", globals->get_tile_mgr(), 
-      SGSubsystemMgr::DISPLAY);
-
     globals->get_scenery()->get_scene_graph()
         ->addChild(simgear::Particles::getCommonRoot());
     simgear::GlobalParticleCallback::setSwitch(fgGetNode("/sim/rendering/particles", true));
@@ -1361,23 +1359,12 @@ bool fgInitSubsystems() {
 
     globals->add_subsystem("gui", new NewGUI, SGSubsystemMgr::INIT);
 
-    ////////////////////////////////////////////////////////////////////
-    // Initialize the lighting subsystem.
-    ////////////////////////////////////////////////////////////////////
-
-    globals->add_subsystem("lighting", new FGLight, SGSubsystemMgr::DISPLAY);
-
     //////////////////////////////////////////////////////////////////////
     // Initialize the 2D cloud subsystem.
     ////////////////////////////////////////////////////////////////////
     fgGetBool("/sim/rendering/bump-mapping", false);
 
-#ifdef ENABLE_AUDIO_SUPPORT
-    ////////////////////////////////////////////////////////////////////
-    // Initialize the sound-effects subsystem.
-    ////////////////////////////////////////////////////////////////////
-    globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY);
-#endif
+
 
     ////////////////////////////////////////////////////////////////////
     // Initialise the ATC Manager 
@@ -1461,7 +1448,37 @@ bool fgInitSubsystems() {
     ////////////////////////////////////////////////////////////////////
     globals->add_subsystem("replay", new FGReplay);
 
+#ifdef ENABLE_AUDIO_SUPPORT
+    ////////////////////////////////////////////////////////////////////
+    // Initialize the sound-effects subsystem.
+    ////////////////////////////////////////////////////////////////////
+    globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY);
+#endif
 
+    ////////////////////////////////////////////////////////////////////
+    // Initialize the lighting subsystem.
+    ////////////////////////////////////////////////////////////////////
+
+    globals->add_subsystem("lighting", new FGLight, SGSubsystemMgr::DISPLAY);
+    
+    // ordering here is important : Nasal (via events), then models, then views
+    globals->add_subsystem("events", globals->get_event_mgr(), SGSubsystemMgr::DISPLAY);
+    
+    FGAircraftModel* acm = new FGAircraftModel;
+    globals->set_aircraft_model(acm);
+    globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY);
+
+    FGModelMgr* mm = new FGModelMgr;
+    globals->set_model_mgr(mm);
+    globals->add_subsystem("model-manager", mm, SGSubsystemMgr::DISPLAY);
+
+    FGViewMgr *viewmgr = new FGViewMgr;
+    globals->set_viewmgr( viewmgr );
+    globals->add_subsystem("view-manager", viewmgr, SGSubsystemMgr::DISPLAY);
+
+    globals->add_subsystem("tile-manager", globals->get_tile_mgr(), 
+      SGSubsystemMgr::DISPLAY);
+      
     ////////////////////////////////////////////////////////////////////
     // Bind and initialize subsystems.
     ////////////////////////////////////////////////////////////////////
diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx
index 7fafd0516..ee5fcf2fd 100644
--- a/src/Main/globals.cxx
+++ b/src/Main/globals.cxx
@@ -170,7 +170,6 @@ FGGlobals::~FGGlobals()
 
     subsystem_mgr->unbind();
     delete subsystem_mgr;
-    delete event_mgr;
     
     delete time_params;
     delete mag;
@@ -180,10 +179,7 @@ FGGlobals::~FGGlobals()
 
     delete ATC_mgr;
     delete controls;
-    delete viewmgr;
 
-//     delete commands;
-    delete model_mgr;
     delete channel_options_list;
     delete initial_waypoints;
     delete scenery;
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 1cfe91ba2..8849644b3 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -54,7 +54,6 @@
 #include <Cockpit/cockpit.hxx>
 #include <Cockpit/hud.hxx>
 #include <Model/panelnode.hxx>
-#include <Model/modelmgr.hxx>
 #include <Model/acmodel.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
@@ -149,16 +148,6 @@ static void fgMainLoop( void ) {
     
     globals->get_subsystem_mgr()->update(sim_dt);
 
-    // run Nasal's settimer() loops right before the view manager
-    globals->get_event_mgr()->update(sim_dt);
-
-    // pick up model coordidnates that Nasal code may have set relative to the
-    // aircraft's
-    globals->get_model_mgr()->update(sim_dt);
-
-    // update the view angle as late as possible, but before sound calculations
-    globals->get_viewmgr()->update(real_dt);
-
     // Update the sound manager last so it can use the CPU while the GPU
     // is processing the scenery (doubled the frame-rate for me) -EMH-
 #ifdef ENABLE_AUDIO_SUPPORT
@@ -375,33 +364,12 @@ static void fgIdleFunction ( void ) {
         globals->set_tile_mgr( new FGTileMgr );
 
 
-        ////////////////////////////////////////////////////////////////////
-        // Initialize the general model subsystem.
-        ////////////////////////////////////////////////////////////////////
-        globals->set_model_mgr(new FGModelMgr);
-        globals->get_model_mgr()->init();
-        globals->get_model_mgr()->bind();
         fgSplashProgress("loading aircraft");
 
 
     } else if ( idle_state == 5 ) {
         idle_state++;
 
-        ////////////////////////////////////////////////////////////////////
-        // Initialize the 3D aircraft model subsystem (has a dependency on
-        // the scenery subsystem.)
-        ////////////////////////////////////////////////////////////////////
-        FGAircraftModel* acm = new FGAircraftModel;
-        globals->set_aircraft_model(acm);
-        globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY);
-
-        ////////////////////////////////////////////////////////////////////
-        // Initialize the view manager subsystem.
-        ////////////////////////////////////////////////////////////////////
-        FGViewMgr *viewmgr = new FGViewMgr;
-        globals->set_viewmgr( viewmgr );
-        viewmgr->init();
-        viewmgr->bind();
         fgSplashProgress("generating sky elements");
 
 
diff --git a/src/Main/viewmgr.cxx b/src/Main/viewmgr.cxx
index 6859c8f41..5a978be63 100644
--- a/src/Main/viewmgr.cxx
+++ b/src/Main/viewmgr.cxx
@@ -39,6 +39,7 @@
 FGViewMgr::FGViewMgr( void ) :
   axis_long(0),
   axis_lat(0),
+  inited(false),
   view_number(fgGetNode("/sim/current-view/view-number", true)),
   config_list(fgGetNode("/sim", true)->getChildren("view")),
   current(0)
@@ -53,6 +54,13 @@ FGViewMgr::~FGViewMgr( void ) {
 void
 FGViewMgr::init ()
 {
+  if (inited) {
+    SG_LOG(SG_GENERAL, SG_WARN, "duplicate init of view manager");
+    return;
+  }
+  
+  inited = true;
+  
   double aspect_ratio_multiplier
       = fgGetDouble("/sim/current-view/aspect-ratio-multiplier");
 
@@ -118,6 +126,7 @@ FGViewMgr::init ()
   }
 
   copyToCurrent();
+  do_bind();
 }
 
 void
@@ -160,7 +169,14 @@ FGViewMgr::reinit ()
 typedef double (FGViewMgr::*double_getter)() const;
 
 void
-FGViewMgr::bind ()
+FGViewMgr::bind()
+{
+  // view-manager code was designed to init before bind, so
+  // this is a no-op; init() calls the real bind() impl below
+}
+
+void
+FGViewMgr::do_bind()
 {
   // these are bound to the current view properties
   fgTie("/sim/current-view/heading-offset-deg", this,
@@ -352,6 +368,10 @@ FGViewMgr::update (double dt)
 void
 FGViewMgr::copyToCurrent()
 {
+  if (!inited) {
+    return;
+  }
+  
     SGPropertyNode *n = config_list[current];
     fgSetString("/sim/current-view/name", n->getStringValue("name"));
     fgSetString("/sim/current-view/type", n->getStringValue("type"));
@@ -719,15 +739,9 @@ FGViewMgr::setView (int newview)
     newview = 0;
 
   // set new view
-  set_view(newview);
+  current = newview;
   // copy in view data
   copyToCurrent();
-
-  // Copy the fdm's position into the SGLocation which is shared with
-  // some views ...
-  globals->get_aircraft_model()->update(0);
-  // Do the update ...
-  update(0);
 }
 
 
@@ -755,7 +769,7 @@ FGViewMgr::getARM_deg () const
 
 void
 FGViewMgr::setARM_deg (double aspect_ratio_multiplier)
-{
+{  
   FGViewer * view = get_current_view();
   if (view != 0)
     view->set_aspect_ratio_multiplier(aspect_ratio_multiplier);
diff --git a/src/Main/viewmgr.hxx b/src/Main/viewmgr.hxx
index c296b7155..c14347e26 100644
--- a/src/Main/viewmgr.hxx
+++ b/src/Main/viewmgr.hxx
@@ -69,14 +69,12 @@ public:
       
     // setters
     void clear();
-    inline void set_view( const int v ) { current = v; }
+
     void add_view( FGViewer * v );
     
-    // copies current offset settings to current-view path...
-    void copyToCurrent ();
-
 private:
-
+    void do_bind();
+    
     list<const char*> tied_props;
 
     double axis_long;
@@ -136,6 +134,10 @@ private:
 
     bool stationary () const;
 
+    // copies current offset settings to current-view path...
+    void copyToCurrent ();
+    
+    bool inited;
     SGPropertyNode_ptr view_number;
     vector<SGPropertyNode_ptr> config_list;
     typedef std::vector<FGViewerPtr> viewer_list;

From 3464eef7112c69b73424314e2b0c876072293497 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Fri, 22 Oct 2010 19:11:24 +0100
Subject: [PATCH 28/45] Make the v2 HUD support reinit(), so HUDs can be
 reloaded at runtime.

---
 src/Instrumentation/HUD/HUD.cxx | 34 +++++++++++++++++++++++----------
 src/Instrumentation/HUD/HUD.hxx |  4 ++++
 2 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/src/Instrumentation/HUD/HUD.cxx b/src/Instrumentation/HUD/HUD.cxx
index 4ea539db3..4a7d6a542 100644
--- a/src/Instrumentation/HUD/HUD.cxx
+++ b/src/Instrumentation/HUD/HUD.cxx
@@ -115,14 +115,8 @@ HUD::~HUD()
     _scr_heightN->removeChangeListener(this);
     _unitsN->removeChangeListener(this);
     delete _font_renderer;
-    delete _clip_box;
-
-    deque<Item *>::const_iterator it, end = _items.end();
-    for (it = _items.begin(); it != end; ++it)
-        delete *it;
-    end = _ladders.end();
-    for (it = _ladders.begin(); it != end; ++it)
-        delete *it;
+    
+    deinit();
 }
 
 
@@ -146,6 +140,27 @@ void HUD::init()
     _path->fireValueChanged();
 }
 
+void HUD::deinit()
+{
+  deque<Item *>::const_iterator it, end = _items.end();
+    for (it = _items.begin(); it != end; ++it)
+        delete *it;
+    end = _ladders.end();
+    for (it = _ladders.begin(); it != end; ++it)
+        delete *it;
+        
+  _items.clear();
+  _ladders.clear();
+  
+  delete _clip_box;
+  _clip_box = NULL;
+}
+
+void HUD::reinit()
+{
+    deinit();
+    _path->fireValueChanged();
+}
 
 void HUD::update(double dt)
 {
@@ -328,8 +343,7 @@ int HUD::load(const char *file, float x, float y, int level, const string& inden
     const sgDebugPriority TREE = SG_INFO;
     const int MAXNEST = 10;
 
-    SGPath path(globals->get_fg_root());
-    path.append(file);
+    SGPath path(globals->resolve_maybe_aircraft_path(file));
 
     if (!level) {
         SG_LOG(SG_INPUT, TREE, endl << "load " << file);
diff --git a/src/Instrumentation/HUD/HUD.hxx b/src/Instrumentation/HUD/HUD.hxx
index 6776495f2..3ef9d7ee7 100644
--- a/src/Instrumentation/HUD/HUD.hxx
+++ b/src/Instrumentation/HUD/HUD.hxx
@@ -153,6 +153,8 @@ public:
     void init();
     void update(double);
 
+  void reinit();
+
     // called from Main/renderer.cxx to draw 2D and 3D HUD
     void draw(osg::State&);
 
@@ -195,6 +197,8 @@ protected:
             int level = 0, const std::string& indent = "");
 
 private:
+    void deinit();
+    
     void draw3D();
     void draw2D(GLfloat, GLfloat, GLfloat, GLfloat);
 

From 3bf1551c18e5fcc1d1cac12b5f2e52b262057850 Mon Sep 17 00:00:00 2001
From: Frederic Bouvier <fredfgfs01@free.fr>
Date: Sat, 23 Oct 2010 17:14:01 +0200
Subject: [PATCH 29/45] Update Vs2010 projects

---
 projects/VC100/FlightGear/FlightGear.vcxproj  | 2882 ++++----
 .../FlightGear/FlightGear.vcxproj.filters     | 5918 +++++++++--------
 2 files changed, 4424 insertions(+), 4376 deletions(-)

diff --git a/projects/VC100/FlightGear/FlightGear.vcxproj b/projects/VC100/FlightGear/FlightGear.vcxproj
index e49368081..990696f94 100644
--- a/projects/VC100/FlightGear/FlightGear.vcxproj
+++ b/projects/VC100/FlightGear/FlightGear.vcxproj
@@ -1,1436 +1,1448 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{49142EAF-B264-4B9F-B096-F669999EBB2E}</ProjectGuid>
-    <RootNamespace>FlightGear</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">fgfs</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">fgfs</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">fgfs</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fgfs</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <BrowseInformation>true</BrowseInformation>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0c09</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
-      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <BrowseInformation>true</BrowseInformation>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0c09</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX64</TargetMachine>
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0c09</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
-      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0c09</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX64</TargetMachine>
-      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\..\src\Aircraft\controls.cxx" />
-    <ClCompile Include="..\..\..\src\Aircraft\replay.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\dynamics.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\gnnode.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\parking.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\pavement.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\runways.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\sidstar.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\simple.cxx" />
-    <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx" />
-    <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATC\atcutils.cxx" />
-    <ClCompile Include="..\..\..\src\ATC\atis.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\component.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\logic.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx" />
-    <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\panel.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx" />
-    <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c" />
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp" />
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp" />
-    <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\flight.cxx" />
-    <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\AirportList.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\dialog.cxx" />
-    <ClCompile Include="..\..\..\src\Gui\fonts.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\gui.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\layout-props.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\layout.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\menubar.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\new_gui.cxx" />
-    <ClCompile Include="..\..\..\src\Gui\property_list.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx" />
-    <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx" />
-    <ClCompile Include="..\..\..\src\Input\FGButton.cxx" />
-    <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx" />
-    <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx" />
-    <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx" />
-    <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx" />
-    <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx" />
-    <ClCompile Include="..\..\..\src\Input\input.cxx" />
-    <ClCompile Include="..\..\..\src\Main\bootstrap.cxx" />
-    <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx" />
-    <ClCompile Include="..\..\..\src\Main\fg_commands.cxx" />
-    <ClCompile Include="..\..\..\src\Main\fg_init.cxx" />
-    <ClCompile Include="..\..\..\src\Main\fg_io.cxx" />
-    <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx" />
-    <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx" />
-    <ClCompile Include="..\..\..\src\Main\fg_props.cxx" />
-    <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx" />
-    <ClCompile Include="..\..\..\src\Main\fgviewer.cxx" />
-    <ClCompile Include="..\..\..\src\Main\globals.cxx" />
-    <ClCompile Include="..\..\..\src\Main\logger.cxx" />
-    <ClCompile Include="..\..\..\src\Main\main.cxx" />
-    <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx" />
-    <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx" />
-    <ClCompile Include="..\..\..\src\Main\options.cxx" />
-    <ClCompile Include="..\..\..\src\Main\renderer.cxx" />
-    <ClCompile Include="..\..\..\src\Main\splash.cxx" />
-    <ClCompile Include="..\..\..\src\Main\util.cxx" />
-    <ClCompile Include="..\..\..\src\Main\viewer.cxx" />
-    <ClCompile Include="..\..\..\src\Main\viewmgr.cxx" />
-    <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx" />
-    <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx" />
-    <ClCompile Include="..\..\..\src\Navaids\awynet.cxx" />
-    <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx" />
-    <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx" />
-    <ClCompile Include="..\..\..\src\Navaids\navdb.cxx" />
-    <ClCompile Include="..\..\..\src\Navaids\navlist.cxx" />
-    <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx" />
-    <ClCompile Include="..\..\..\src\Navaids\positioned.cxx" />
-    <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx" />
-    <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx" />
-    <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx" />
-    <ClCompile Include="..\..\..\src\Network\atlas.cxx" />
-    <ClCompile Include="..\..\..\src\Network\AV400.cxx" />
-    <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx" />
-    <ClCompile Include="..\..\..\src\Network\garmin.cxx" />
-    <ClCompile Include="..\..\..\src\Network\generic.cxx" />
-    <ClCompile Include="..\..\..\src\Network\httpd.cxx" />
-    <ClCompile Include="..\..\..\src\Network\joyclient.cxx" />
-    <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx" />
-    <ClCompile Include="..\..\..\src\Network\jsclient.cxx" />
-    <ClCompile Include="..\..\..\src\Network\multiplay.cxx" />
-    <ClCompile Include="..\..\..\src\Network\native.cxx" />
-    <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx" />
-    <ClCompile Include="..\..\..\src\Network\native_fdm.cxx" />
-    <ClCompile Include="..\..\..\src\Network\native_gui.cxx" />
-    <ClCompile Include="..\..\..\src\Network\nmea.cxx" />
-    <ClCompile Include="..\..\..\src\Network\opengc.cxx" />
-    <ClCompile Include="..\..\..\src\Network\props.cxx" />
-    <ClCompile Include="..\..\..\src\Network\protocol.cxx" />
-    <ClCompile Include="..\..\..\src\Network\pve.cxx" />
-    <ClCompile Include="..\..\..\src\Network\ray.cxx" />
-    <ClCompile Include="..\..\..\src\Network\rul.cxx" />
-    <ClCompile Include="..\..\..\src\Scenery\redout.cxx" />
-    <ClCompile Include="..\..\..\src\Scenery\scenery.cxx" />
-    <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx" />
-    <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx" />
-    <ClCompile Include="..\..\..\src\Sound\beacon.cxx" />
-    <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx" />
-    <ClCompile Include="..\..\..\src\Sound\morse.cxx" />
-    <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx" />
-    <ClCompile Include="..\..\..\src\Sound\voice.cxx" />
-    <ClCompile Include="..\..\..\src\Time\light.cxx" />
-    <ClCompile Include="..\..\..\src\Time\sunsolver.cxx" />
-    <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx" />
-    <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\environment.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\fgwind.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx" />
-    <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx" />
-    <ClCompile Include="..\..\..\src\Model\acmodel.cxx" />
-    <ClCompile Include="..\..\..\src\Model\model_panel.cxx" />
-    <ClCompile Include="..\..\..\src\Model\modelmgr.cxx" />
-    <ClCompile Include="..\..\..\src\Model\panelnode.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\UFO.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Systems\electrical.cxx" />
-    <ClCompile Include="..\..\..\src\Systems\pitot.cxx" />
-    <ClCompile Include="..\..\..\src\Systems\static.cxx" />
-    <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx" />
-    <ClCompile Include="..\..\..\src\Systems\vacuum.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx" />
-    <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx" />
-    <ClCompile Include="..\..\..\src\AIModel\submodel.cxx" />
-    <ClCompile Include="..\..\..\src\Time\TimeManager.cxx" />
-    <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx" />
-    <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx" />
-    <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx" />
-    <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx" />
-    <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx" />
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx" />
-    <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\..\src\Aircraft\controls.hxx" />
-    <ClInclude Include="..\..\..\src\Aircraft\replay.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\dynamics.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\gnnode.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\parking.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\pavement.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\runways.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\sidstar.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\simple.hxx" />
-    <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx" />
-    <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATC\atcutils.hxx" />
-    <ClInclude Include="..\..\..\src\ATC\atis.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\component.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\functor.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\logic.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx" />
-    <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx" />
-    <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx" />
-    <ClInclude Include="..\..\..\src\Cockpit\hud.hxx" />
-    <ClInclude Include="..\..\..\src\Cockpit\panel.hxx" />
-    <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx" />
-    <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h" />
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h" />
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h" />
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h" />
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp" />
-    <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp" />
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp" />
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp" />
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp" />
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp" />
-    <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\flight.hxx" />
-    <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\AirportList.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\dialog.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\gui.h" />
-    <ClInclude Include="..\..\..\src\GUI\layout.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\menubar.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\new_gui.hxx" />
-    <ClInclude Include="..\..\..\src\Gui\property_list.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx" />
-    <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx" />
-    <ClInclude Include="..\..\..\src\Input\FGButton.hxx" />
-    <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx" />
-    <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx" />
-    <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx" />
-    <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx" />
-    <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx" />
-    <ClInclude Include="..\..\..\src\Input\input.hxx" />
-    <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx" />
-    <ClInclude Include="..\..\..\src\Main\fg_commands.hxx" />
-    <ClInclude Include="..\..\..\src\Main\fg_init.hxx" />
-    <ClInclude Include="..\..\..\src\Main\fg_io.hxx" />
-    <ClInclude Include="..\..\..\src\Main\fg_os.hxx" />
-    <ClInclude Include="..\..\..\src\Main\fg_props.hxx" />
-    <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx" />
-    <ClInclude Include="..\..\..\src\Main\fgviewer.hxx" />
-    <ClInclude Include="..\..\..\src\Main\globals.hxx" />
-    <ClInclude Include="..\..\..\src\Main\logger.hxx" />
-    <ClInclude Include="..\..\..\src\Main\main.hxx" />
-    <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx" />
-    <ClInclude Include="..\..\..\src\Main\options.hxx" />
-    <ClInclude Include="..\..\..\src\Main\renderer.hxx" />
-    <ClInclude Include="..\..\..\src\Main\splash.hxx" />
-    <ClInclude Include="..\..\..\src\Main\util.hxx" />
-    <ClInclude Include="..\..\..\src\Main\viewer.hxx" />
-    <ClInclude Include="..\..\..\src\Main\viewmgr.hxx" />
-    <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx" />
-    <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\awynet.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\fix.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\nav.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\navdb.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\navlist.hxx" />
-    <ClInclude Include="..\..\..\src\Navaids\positioned.hxx" />
-    <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx" />
-    <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx" />
-    <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx" />
-    <ClInclude Include="..\..\..\src\Network\atlas.hxx" />
-    <ClInclude Include="..\..\..\src\Network\AV400.hxx" />
-    <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx" />
-    <ClInclude Include="..\..\..\src\Network\garmin.hxx" />
-    <ClInclude Include="..\..\..\src\Network\generic.hxx" />
-    <ClInclude Include="..\..\..\src\Network\httpd.hxx" />
-    <ClInclude Include="..\..\..\src\Network\joyclient.hxx" />
-    <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx" />
-    <ClInclude Include="..\..\..\src\Network\jsclient.hxx" />
-    <ClInclude Include="..\..\..\src\Network\multiplay.hxx" />
-    <ClInclude Include="..\..\..\src\Network\native.hxx" />
-    <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx" />
-    <ClInclude Include="..\..\..\src\Network\native_fdm.hxx" />
-    <ClInclude Include="..\..\..\src\Network\native_gui.hxx" />
-    <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx" />
-    <ClInclude Include="..\..\..\src\Network\net_fdm.hxx" />
-    <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx" />
-    <ClInclude Include="..\..\..\src\Network\net_gui.hxx" />
-    <ClInclude Include="..\..\..\src\Network\nmea.hxx" />
-    <ClInclude Include="..\..\..\src\Network\opengc.hxx" />
-    <ClInclude Include="..\..\..\src\Network\opengc_data.hxx" />
-    <ClInclude Include="..\..\..\src\Network\props.hxx" />
-    <ClInclude Include="..\..\..\src\Network\protocol.hxx" />
-    <ClInclude Include="..\..\..\src\Network\pve.hxx" />
-    <ClInclude Include="..\..\..\src\Network\ray.hxx" />
-    <ClInclude Include="..\..\..\src\Network\rul.hxx" />
-    <ClInclude Include="..\..\..\src\Scenery\redout.hxx" />
-    <ClInclude Include="..\..\..\src\Scenery\scenery.hxx" />
-    <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx" />
-    <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx" />
-    <ClInclude Include="..\..\..\src\Sound\beacon.hxx" />
-    <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx" />
-    <ClInclude Include="..\..\..\src\Sound\morse.hxx" />
-    <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx" />
-    <ClInclude Include="..\..\..\src\Sound\voice.hxx" />
-    <ClInclude Include="..\..\..\src\Time\light.hxx" />
-    <ClInclude Include="..\..\..\src\Time\sunsolver.hxx" />
-    <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx" />
-    <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx" />
-    <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\environment.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\fgwind.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx" />
-    <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx" />
-    <ClInclude Include="..\..\..\src\Model\acmodel.hxx" />
-    <ClInclude Include="..\..\..\src\Model\model_panel.hxx" />
-    <ClInclude Include="..\..\..\src\Model\modelmgr.hxx" />
-    <ClInclude Include="..\..\..\src\Model\panelnode.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\UFO.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx" />
-    <ClInclude Include="..\..\..\src\Systems\electrical.hxx" />
-    <ClInclude Include="..\..\..\src\Systems\pitot.hxx" />
-    <ClInclude Include="..\..\..\src\Systems\static.hxx" />
-    <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx" />
-    <ClInclude Include="..\..\..\src\Systems\vacuum.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx" />
-    <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx" />
-    <ClInclude Include="..\..\..\src\AIModel\submodel.hxx" />
-    <ClInclude Include="..\..\..\src\Time\TimeManager.hxx" />
-    <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx" />
-    <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx" />
-    <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx" />
-    <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx" />
-    <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx" />
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx" />
-    <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx" />
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\..\src\Include\config.h-msvc90">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generation of config.h</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generation of config.h</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generation of config.h</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generation of config.h</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuildStep Include="..\flightgear.ico">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </CustomBuildStep>
-    <CustomBuildStep Include="..\flightgear64.ico">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-    </CustomBuildStep>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="..\flightgear.rc">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ResourceCompile>
-    <ResourceCompile Include="..\flightgear64.rc">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-    </ResourceCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\..\..\SimGear\projects\VC100\SimGear.vcxproj">
-      <Project>{22540cd3-d3ca-4c86-a773-80aeee3acded}</Project>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{49142EAF-B264-4B9F-B096-F669999EBB2E}</ProjectGuid>
+    <RootNamespace>FlightGear</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">fgfs</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">fgfs</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">fgfs</TargetName>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fgfs</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <CompileAs>Default</CompileAs>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0c09</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <CompileAs>Default</CompileAs>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0c09</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>Default</CompileAs>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0c09</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>Default</CompileAs>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0c09</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)fgfs.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+      <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\Aircraft\controls.cxx" />
+    <ClCompile Include="..\..\..\src\Aircraft\replay.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\dynamics.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\gnnode.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\parking.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\pavement.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\runways.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\sidstar.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\simple.cxx" />
+    <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx" />
+    <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATC\atcutils.cxx" />
+    <ClCompile Include="..\..\..\src\ATC\atis.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\component.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\logic.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx" />
+    <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud.cxx">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\panel.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx" />
+    <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c" />
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp" />
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp" />
+    <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\flight.cxx" />
+    <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\AirportList.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\dialog.cxx" />
+    <ClCompile Include="..\..\..\src\Gui\fonts.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\gui.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\layout-props.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\layout.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\menubar.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\new_gui.cxx" />
+    <ClCompile Include="..\..\..\src\Gui\property_list.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx" />
+    <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx" />
+    <ClCompile Include="..\..\..\src\Input\FGButton.cxx" />
+    <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx" />
+    <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx" />
+    <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx" />
+    <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx" />
+    <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx" />
+    <ClCompile Include="..\..\..\src\Input\input.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\rnav_waypt_controller.cxx" />
+    <ClCompile Include="..\..\..\src\Main\bootstrap.cxx" />
+    <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx" />
+    <ClCompile Include="..\..\..\src\Main\fg_commands.cxx" />
+    <ClCompile Include="..\..\..\src\Main\fg_init.cxx" />
+    <ClCompile Include="..\..\..\src\Main\fg_io.cxx" />
+    <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx" />
+    <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx" />
+    <ClCompile Include="..\..\..\src\Main\fg_props.cxx" />
+    <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx" />
+    <ClCompile Include="..\..\..\src\Main\fgviewer.cxx" />
+    <ClCompile Include="..\..\..\src\Main\globals.cxx" />
+    <ClCompile Include="..\..\..\src\Main\logger.cxx" />
+    <ClCompile Include="..\..\..\src\Main\main.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\airways.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\procedure.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\route.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\routePath.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\waypoint.cxx" />
+    <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx" />
+    <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx" />
+    <ClCompile Include="..\..\..\src\Main\options.cxx" />
+    <ClCompile Include="..\..\..\src\Main\renderer.cxx" />
+    <ClCompile Include="..\..\..\src\Main\splash.cxx" />
+    <ClCompile Include="..\..\..\src\Main\util.cxx" />
+    <ClCompile Include="..\..\..\src\Main\viewer.cxx" />
+    <ClCompile Include="..\..\..\src\Main\viewmgr.cxx" />
+    <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx" />
+    <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\awynet.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\navdb.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\navlist.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx" />
+    <ClCompile Include="..\..\..\src\Navaids\positioned.cxx" />
+    <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx" />
+    <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx" />
+    <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx" />
+    <ClCompile Include="..\..\..\src\Network\atlas.cxx" />
+    <ClCompile Include="..\..\..\src\Network\AV400.cxx" />
+    <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx" />
+    <ClCompile Include="..\..\..\src\Network\garmin.cxx" />
+    <ClCompile Include="..\..\..\src\Network\generic.cxx" />
+    <ClCompile Include="..\..\..\src\Network\httpd.cxx" />
+    <ClCompile Include="..\..\..\src\Network\joyclient.cxx" />
+    <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx" />
+    <ClCompile Include="..\..\..\src\Network\jsclient.cxx" />
+    <ClCompile Include="..\..\..\src\Network\multiplay.cxx" />
+    <ClCompile Include="..\..\..\src\Network\native.cxx" />
+    <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx" />
+    <ClCompile Include="..\..\..\src\Network\native_fdm.cxx" />
+    <ClCompile Include="..\..\..\src\Network\native_gui.cxx" />
+    <ClCompile Include="..\..\..\src\Network\nmea.cxx" />
+    <ClCompile Include="..\..\..\src\Network\opengc.cxx" />
+    <ClCompile Include="..\..\..\src\Network\props.cxx" />
+    <ClCompile Include="..\..\..\src\Network\protocol.cxx" />
+    <ClCompile Include="..\..\..\src\Network\pve.cxx" />
+    <ClCompile Include="..\..\..\src\Network\ray.cxx" />
+    <ClCompile Include="..\..\..\src\Network\rul.cxx" />
+    <ClCompile Include="..\..\..\src\Scenery\redout.cxx" />
+    <ClCompile Include="..\..\..\src\Scenery\scenery.cxx" />
+    <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx" />
+    <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx" />
+    <ClCompile Include="..\..\..\src\Sound\beacon.cxx" />
+    <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx" />
+    <ClCompile Include="..\..\..\src\Sound\morse.cxx" />
+    <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx" />
+    <ClCompile Include="..\..\..\src\Sound\voice.cxx" />
+    <ClCompile Include="..\..\..\src\Time\light.cxx" />
+    <ClCompile Include="..\..\..\src\Time\sunsolver.cxx" />
+    <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx" />
+    <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\environment.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\fgwind.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx" />
+    <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx" />
+    <ClCompile Include="..\..\..\src\Model\acmodel.cxx" />
+    <ClCompile Include="..\..\..\src\Model\model_panel.cxx" />
+    <ClCompile Include="..\..\..\src\Model\modelmgr.cxx" />
+    <ClCompile Include="..\..\..\src\Model\panelnode.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\UFO.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx">
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Systems\electrical.cxx" />
+    <ClCompile Include="..\..\..\src\Systems\pitot.cxx" />
+    <ClCompile Include="..\..\..\src\Systems\static.cxx" />
+    <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx" />
+    <ClCompile Include="..\..\..\src\Systems\vacuum.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx" />
+    <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx" />
+    <ClCompile Include="..\..\..\src\AIModel\submodel.cxx" />
+    <ClCompile Include="..\..\..\src\Time\TimeManager.cxx" />
+    <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx" />
+    <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx" />
+    <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx" />
+    <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx" />
+    <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx" />
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx" />
+    <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\Aircraft\controls.hxx" />
+    <ClInclude Include="..\..\..\src\Aircraft\replay.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\dynamics.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\gnnode.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\parking.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\pavement.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\runways.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\sidstar.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\simple.hxx" />
+    <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx" />
+    <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATC\atcutils.hxx" />
+    <ClInclude Include="..\..\..\src\ATC\atis.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\component.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\functor.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\logic.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx" />
+    <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx" />
+    <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx" />
+    <ClInclude Include="..\..\..\src\Cockpit\hud.hxx" />
+    <ClInclude Include="..\..\..\src\Cockpit\panel.hxx" />
+    <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx" />
+    <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h" />
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h" />
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h" />
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h" />
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp" />
+    <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp" />
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp" />
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp" />
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp" />
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp" />
+    <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\flight.hxx" />
+    <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\AirportList.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\dialog.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\gui.h" />
+    <ClInclude Include="..\..\..\src\GUI\layout.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\menubar.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\new_gui.hxx" />
+    <ClInclude Include="..\..\..\src\Gui\property_list.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx" />
+    <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx" />
+    <ClInclude Include="..\..\..\src\Input\FGButton.hxx" />
+    <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx" />
+    <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx" />
+    <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx" />
+    <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx" />
+    <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx" />
+    <ClInclude Include="..\..\..\src\Input\input.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\rnav_waypt_controller.hxx" />
+    <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx" />
+    <ClInclude Include="..\..\..\src\Main\fg_commands.hxx" />
+    <ClInclude Include="..\..\..\src\Main\fg_init.hxx" />
+    <ClInclude Include="..\..\..\src\Main\fg_io.hxx" />
+    <ClInclude Include="..\..\..\src\Main\fg_os.hxx" />
+    <ClInclude Include="..\..\..\src\Main\fg_props.hxx" />
+    <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx" />
+    <ClInclude Include="..\..\..\src\Main\fgviewer.hxx" />
+    <ClInclude Include="..\..\..\src\Main\globals.hxx" />
+    <ClInclude Include="..\..\..\src\Main\logger.hxx" />
+    <ClInclude Include="..\..\..\src\Main\main.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\airways.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\procedure.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\route.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\routePath.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\waypoint.hxx" />
+    <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx" />
+    <ClInclude Include="..\..\..\src\Main\options.hxx" />
+    <ClInclude Include="..\..\..\src\Main\renderer.hxx" />
+    <ClInclude Include="..\..\..\src\Main\splash.hxx" />
+    <ClInclude Include="..\..\..\src\Main\util.hxx" />
+    <ClInclude Include="..\..\..\src\Main\viewer.hxx" />
+    <ClInclude Include="..\..\..\src\Main\viewmgr.hxx" />
+    <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx" />
+    <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\awynet.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\fix.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\nav.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\navdb.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\navlist.hxx" />
+    <ClInclude Include="..\..\..\src\Navaids\positioned.hxx" />
+    <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx" />
+    <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx" />
+    <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx" />
+    <ClInclude Include="..\..\..\src\Network\atlas.hxx" />
+    <ClInclude Include="..\..\..\src\Network\AV400.hxx" />
+    <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx" />
+    <ClInclude Include="..\..\..\src\Network\garmin.hxx" />
+    <ClInclude Include="..\..\..\src\Network\generic.hxx" />
+    <ClInclude Include="..\..\..\src\Network\httpd.hxx" />
+    <ClInclude Include="..\..\..\src\Network\joyclient.hxx" />
+    <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx" />
+    <ClInclude Include="..\..\..\src\Network\jsclient.hxx" />
+    <ClInclude Include="..\..\..\src\Network\multiplay.hxx" />
+    <ClInclude Include="..\..\..\src\Network\native.hxx" />
+    <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx" />
+    <ClInclude Include="..\..\..\src\Network\native_fdm.hxx" />
+    <ClInclude Include="..\..\..\src\Network\native_gui.hxx" />
+    <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx" />
+    <ClInclude Include="..\..\..\src\Network\net_fdm.hxx" />
+    <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx" />
+    <ClInclude Include="..\..\..\src\Network\net_gui.hxx" />
+    <ClInclude Include="..\..\..\src\Network\nmea.hxx" />
+    <ClInclude Include="..\..\..\src\Network\opengc.hxx" />
+    <ClInclude Include="..\..\..\src\Network\opengc_data.hxx" />
+    <ClInclude Include="..\..\..\src\Network\props.hxx" />
+    <ClInclude Include="..\..\..\src\Network\protocol.hxx" />
+    <ClInclude Include="..\..\..\src\Network\pve.hxx" />
+    <ClInclude Include="..\..\..\src\Network\ray.hxx" />
+    <ClInclude Include="..\..\..\src\Network\rul.hxx" />
+    <ClInclude Include="..\..\..\src\Scenery\redout.hxx" />
+    <ClInclude Include="..\..\..\src\Scenery\scenery.hxx" />
+    <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx" />
+    <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx" />
+    <ClInclude Include="..\..\..\src\Sound\beacon.hxx" />
+    <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx" />
+    <ClInclude Include="..\..\..\src\Sound\morse.hxx" />
+    <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx" />
+    <ClInclude Include="..\..\..\src\Sound\voice.hxx" />
+    <ClInclude Include="..\..\..\src\Time\light.hxx" />
+    <ClInclude Include="..\..\..\src\Time\sunsolver.hxx" />
+    <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx" />
+    <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx" />
+    <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\environment.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\fgwind.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx" />
+    <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx" />
+    <ClInclude Include="..\..\..\src\Model\acmodel.hxx" />
+    <ClInclude Include="..\..\..\src\Model\model_panel.hxx" />
+    <ClInclude Include="..\..\..\src\Model\modelmgr.hxx" />
+    <ClInclude Include="..\..\..\src\Model\panelnode.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\UFO.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx" />
+    <ClInclude Include="..\..\..\src\Systems\electrical.hxx" />
+    <ClInclude Include="..\..\..\src\Systems\pitot.hxx" />
+    <ClInclude Include="..\..\..\src\Systems\static.hxx" />
+    <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx" />
+    <ClInclude Include="..\..\..\src\Systems\vacuum.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx" />
+    <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx" />
+    <ClInclude Include="..\..\..\src\AIModel\submodel.hxx" />
+    <ClInclude Include="..\..\..\src\Time\TimeManager.hxx" />
+    <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx" />
+    <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx" />
+    <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx" />
+    <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx" />
+    <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx" />
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx" />
+    <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="..\..\..\src\Include\config.h-msvc90">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generation of config.h</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generation of config.h</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generation of config.h</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generation of config.h</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuildStep Include="..\flightgear.ico">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </CustomBuildStep>
+    <CustomBuildStep Include="..\flightgear64.ico">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </CustomBuildStep>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\flightgear.rc">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ResourceCompile>
+    <ResourceCompile Include="..\flightgear64.rc">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\SimGear\projects\VC100\SimGear.vcxproj">
+      <Project>{22540cd3-d3ca-4c86-a773-80aeee3acded}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
diff --git a/projects/VC100/FlightGear/FlightGear.vcxproj.filters b/projects/VC100/FlightGear/FlightGear.vcxproj.filters
index 8c7e59f3d..392ec0ef7 100644
--- a/projects/VC100/FlightGear/FlightGear.vcxproj.filters
+++ b/projects/VC100/FlightGear/FlightGear.vcxproj.filters
@@ -1,2942 +1,2978 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Lib_Aircraft">
-      <UniqueIdentifier>{5b5a7035-1789-4175-be3c-5ba77c37de44}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Airports">
-      <UniqueIdentifier>{8efb426e-e23e-42d6-9e6e-406c51e3a65c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_ATCDCL">
-      <UniqueIdentifier>{7d7c9038-3ad4-4e1f-b67d-d27baa06f8e8}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Autopilot">
-      <UniqueIdentifier>{a2116df7-5e2f-40d8-a56f-ef96cdebd6c6}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Cockpit">
-      <UniqueIdentifier>{6ed1f548-d273-46c6-a0bb-b9ee2303f481}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Cockpit\build_in">
-      <UniqueIdentifier>{eacbd83d-0087-44ce-a78f-73d5498b2af1}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim">
-      <UniqueIdentifier>{d8c4cb07-9e19-43f0-a85a-dcf30b2545c7}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim\math">
-      <UniqueIdentifier>{183efdbf-00a8-427a-98da-dec58255128e}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim\models">
-      <UniqueIdentifier>{411dbaca-baf6-4170-b100-71a554209935}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim\models\atmosphere">
-      <UniqueIdentifier>{9436baf4-76e7-4226-a161-60eab79eb34b}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim\models\flight_control">
-      <UniqueIdentifier>{2487fd19-c144-45be-aea7-289d221345b5}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim\models\propulsion">
-      <UniqueIdentifier>{d371bccf-2c19-4079-b535-d031216e8490}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim\input_output">
-      <UniqueIdentifier>{27550555-bc98-408b-b4b0-4ebd297b6a3d}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_JSBSim\initialization">
-      <UniqueIdentifier>{b3b2ce93-c999-472a-bfa6-06c1143c7fae}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_LaRCsim">
-      <UniqueIdentifier>{cb4d76a1-7275-4cd6-a305-63636b13ade9}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_UIUCModel">
-      <UniqueIdentifier>{ff59ef83-e9a1-46ac-8391-e268a9df0dfc}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_YASim">
-      <UniqueIdentifier>{fabb1c71-61fb-4a57-88da-26945141c440}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Flight">
-      <UniqueIdentifier>{940c9533-0978-40ef-8d39-961d0ad89b4e}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_GUI">
-      <UniqueIdentifier>{c9754169-5e10-4035-9544-6294c31d9709}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Input">
-      <UniqueIdentifier>{131a31a9-d8bd-4a93-8cce-4798aa9c9bc9}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="main">
-      <UniqueIdentifier>{0c65f02c-7bae-4389-bf94-5e2c67ba0e68}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Navaids">
-      <UniqueIdentifier>{81173da0-37ce-43a2-85a6-0a5efcbfed91}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Network">
-      <UniqueIdentifier>{bae088e3-d112-4668-b653-beb723426c96}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Scenery">
-      <UniqueIdentifier>{6b8abb03-12fe-470a-a3d6-69f2b99cb082}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Sound">
-      <UniqueIdentifier>{56f378cc-a098-4fc1-b6db-708df701363c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Time">
-      <UniqueIdentifier>{10afb571-0a80-4493-9d07-71dbb3e128fb}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Multiplayer">
-      <UniqueIdentifier>{5f18d822-922b-4bc5-a197-1f9c749d3aca}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Environment">
-      <UniqueIdentifier>{da1bf6b6-517a-4d9b-8de2-b43a126426a8}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Model">
-      <UniqueIdentifier>{3a8fdd5f-359c-4867-b542-c680216b835b}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_UFO">
-      <UniqueIdentifier>{5ecfbcb6-4b64-419f-8e53-f0cf299087bf}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Instrumentation">
-      <UniqueIdentifier>{4d06a2fc-202e-44ed-bf26-22bbef505bc5}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Instrumentation\Lib_HUD">
-      <UniqueIdentifier>{1965f1ef-8cc9-40d6-876b-6f1787bd300d}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Systems">
-      <UniqueIdentifier>{175c5293-cb40-47ec-bceb-f234bedfd31c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_ExternalNet">
-      <UniqueIdentifier>{bed96b77-e07c-42c9-956a-df71af33a794}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="ExternalPipe">
-      <UniqueIdentifier>{0a02d14a-7bb7-4564-a1b9-7a8f5ccc9cbd}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_AIModel">
-      <UniqueIdentifier>{044334ac-08b1-409d-acd5-b950b9d57ced}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_Traffic">
-      <UniqueIdentifier>{22009ac9-4ac5-4518-afd8-0b237abe6d00}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_SP">
-      <UniqueIdentifier>{9a55973a-7b5a-4fbd-9873-93012209f7e0}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_KLN89">
-      <UniqueIdentifier>{8cae8c55-248a-4be4-a389-24f651d7b9ea}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Lib_ATC">
-      <UniqueIdentifier>{8f862bbd-b18e-4576-989c-a9463482781a}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\..\src\Aircraft\controls.cxx">
-      <Filter>Lib_Aircraft</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Aircraft\replay.cxx">
-      <Filter>Lib_Aircraft</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\dynamics.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\gnnode.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\parking.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\pavement.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\runways.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\sidstar.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\simple.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx">
-      <Filter>Lib_Airports</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\panel.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx">
-      <Filter>Lib_Cockpit\build_in</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp">
-      <Filter>Lib_JSBSim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp">
-      <Filter>Lib_JSBSim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp">
-      <Filter>Lib_JSBSim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx">
-      <Filter>Lib_JSBSim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp">
-      <Filter>Lib_JSBSim\models\atmosphere</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp">
-      <Filter>Lib_JSBSim\models\atmosphere</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp">
-      <Filter>Lib_JSBSim\models\atmosphere</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp">
-      <Filter>Lib_JSBSim\initialization</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp">
-      <Filter>Lib_JSBSim\initialization</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp">
-      <Filter>Lib_JSBSim\initialization</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx">
-      <Filter>Lib_YASim</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\flight.cxx">
-      <Filter>Lib_Flight</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx">
-      <Filter>Lib_Flight</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx">
-      <Filter>Lib_Flight</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\AirportList.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\dialog.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Gui\fonts.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\gui.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\layout-props.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\layout.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\menubar.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\new_gui.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Gui\property_list.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx">
-      <Filter>Lib_GUI</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Input\FGButton.cxx">
-      <Filter>Lib_Input</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx">
-      <Filter>Lib_Input</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx">
-      <Filter>Lib_Input</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx">
-      <Filter>Lib_Input</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx">
-      <Filter>Lib_Input</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx">
-      <Filter>Lib_Input</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Input\input.cxx">
-      <Filter>Lib_Input</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\bootstrap.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\fg_commands.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\fg_init.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\fg_io.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\fg_props.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\fgviewer.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\globals.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\logger.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\main.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\options.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\renderer.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\splash.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\util.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\viewer.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\viewmgr.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx">
-      <Filter>main</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Navaids\awynet.cxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Navaids\navdb.cxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Navaids\navlist.cxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Navaids\positioned.cxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\atlas.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\AV400.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\garmin.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\generic.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\httpd.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\joyclient.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\jsclient.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\multiplay.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\native.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\native_fdm.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\native_gui.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\nmea.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\opengc.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\props.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\protocol.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\pve.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\ray.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Network\rul.cxx">
-      <Filter>Lib_Network</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Scenery\redout.cxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Scenery\scenery.cxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Sound\beacon.cxx">
-      <Filter>Lib_Sound</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx">
-      <Filter>Lib_Sound</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Sound\morse.cxx">
-      <Filter>Lib_Sound</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx">
-      <Filter>Lib_Sound</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Sound\voice.cxx">
-      <Filter>Lib_Sound</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Time\light.cxx">
-      <Filter>Lib_Time</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Time\sunsolver.cxx">
-      <Filter>Lib_Time</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx">
-      <Filter>Lib_Multiplayer</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx">
-      <Filter>Lib_Multiplayer</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\environment.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\fgwind.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Model\acmodel.cxx">
-      <Filter>Lib_Model</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Model\model_panel.cxx">
-      <Filter>Lib_Model</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Model\modelmgr.cxx">
-      <Filter>Lib_Model</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Model\panelnode.cxx">
-      <Filter>Lib_Model</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\UFO.cxx">
-      <Filter>Lib_UFO</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Systems\electrical.cxx">
-      <Filter>Lib_Systems</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Systems\pitot.cxx">
-      <Filter>Lib_Systems</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Systems\static.cxx">
-      <Filter>Lib_Systems</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx">
-      <Filter>Lib_Systems</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Systems\vacuum.cxx">
-      <Filter>Lib_Systems</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx">
-      <Filter>Lib_ExternalNet</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx">
-      <Filter>ExternalPipe</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\AIModel\submodel.cxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx">
-      <Filter>Lib_Traffic</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx">
-      <Filter>Lib_Traffic</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx">
-      <Filter>Lib_Traffic</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx">
-      <Filter>Lib_SP</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx">
-      <Filter>Lib_SP</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx">
-      <Filter>Lib_ATC</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx">
-      <Filter>Lib_Flight</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATC\atcutils.cxx">
-      <Filter>Lib_ATC</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\component.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\logic.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx">
-      <Filter>Lib_Flight</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx">
-      <Filter>Lib_Environment</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\ATC\atis.cxx">
-      <Filter>Lib_ATC</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\Time\TimeManager.cxx">
-      <Filter>Lib_Time</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\..\src\Aircraft\controls.hxx">
-      <Filter>Lib_Aircraft</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Aircraft\replay.hxx">
-      <Filter>Lib_Aircraft</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\dynamics.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\gnnode.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\parking.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\pavement.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\runways.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\sidstar.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\simple.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx">
-      <Filter>Lib_Airports</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx">
-      <Filter>Lib_ATCDCL</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Cockpit\hud.hxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Cockpit\panel.hxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx">
-      <Filter>Lib_Cockpit</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx">
-      <Filter>Lib_Cockpit\build_in</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h">
-      <Filter>Lib_JSBSim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h">
-      <Filter>Lib_JSBSim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h">
-      <Filter>Lib_JSBSim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx">
-      <Filter>Lib_JSBSim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h">
-      <Filter>Lib_JSBSim\models</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h">
-      <Filter>Lib_JSBSim\models\atmosphere</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h">
-      <Filter>Lib_JSBSim\models\atmosphere</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h">
-      <Filter>Lib_JSBSim\models\flight_control</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h">
-      <Filter>Lib_JSBSim\models\propulsion</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx">
-      <Filter>Lib_JSBSim\input_output</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h">
-      <Filter>Lib_JSBSim\initialization</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h">
-      <Filter>Lib_JSBSim\initialization</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h">
-      <Filter>Lib_JSBSim\initialization</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h">
-      <Filter>Lib_LaRCsim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h">
-      <Filter>Lib_UIUCModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx">
-      <Filter>Lib_YASim</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\flight.hxx">
-      <Filter>Lib_Flight</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx">
-      <Filter>Lib_Flight</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx">
-      <Filter>Lib_Flight</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\AirportList.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\dialog.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\gui.h">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\layout.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\menubar.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\new_gui.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Gui\property_list.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx">
-      <Filter>Lib_GUI</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Input\FGButton.hxx">
-      <Filter>Lib_Input</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx">
-      <Filter>Lib_Input</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx">
-      <Filter>Lib_Input</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx">
-      <Filter>Lib_Input</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx">
-      <Filter>Lib_Input</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx">
-      <Filter>Lib_Input</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Input\input.hxx">
-      <Filter>Lib_Input</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\fg_commands.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\fg_init.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\fg_io.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\fg_os.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\fg_props.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\fgviewer.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\globals.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\logger.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\main.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\options.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\renderer.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\splash.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\util.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\viewer.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\viewmgr.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx">
-      <Filter>main</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\awynet.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\fix.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\nav.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\navdb.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\navlist.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Navaids\positioned.hxx">
-      <Filter>Lib_Navaids</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\atlas.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\AV400.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\garmin.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\generic.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\httpd.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\joyclient.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\jsclient.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\multiplay.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\native.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\native_fdm.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\native_gui.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\net_fdm.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\net_gui.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\nmea.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\opengc.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\opengc_data.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\props.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\protocol.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\pve.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\ray.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Network\rul.hxx">
-      <Filter>Lib_Network</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Scenery\redout.hxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Scenery\scenery.hxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx">
-      <Filter>Lib_Scenery</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Sound\beacon.hxx">
-      <Filter>Lib_Sound</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx">
-      <Filter>Lib_Sound</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Sound\morse.hxx">
-      <Filter>Lib_Sound</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx">
-      <Filter>Lib_Sound</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Sound\voice.hxx">
-      <Filter>Lib_Sound</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Time\light.hxx">
-      <Filter>Lib_Time</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Time\sunsolver.hxx">
-      <Filter>Lib_Time</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx">
-      <Filter>Lib_Multiplayer</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx">
-      <Filter>Lib_Multiplayer</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx">
-      <Filter>Lib_Multiplayer</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\environment.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\fgwind.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Model\acmodel.hxx">
-      <Filter>Lib_Model</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Model\model_panel.hxx">
-      <Filter>Lib_Model</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Model\modelmgr.hxx">
-      <Filter>Lib_Model</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Model\panelnode.hxx">
-      <Filter>Lib_Model</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\UFO.hxx">
-      <Filter>Lib_UFO</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx">
-      <Filter>Lib_Instrumentation</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx">
-      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Systems\electrical.hxx">
-      <Filter>Lib_Systems</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Systems\pitot.hxx">
-      <Filter>Lib_Systems</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Systems\static.hxx">
-      <Filter>Lib_Systems</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx">
-      <Filter>Lib_Systems</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Systems\vacuum.hxx">
-      <Filter>Lib_Systems</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx">
-      <Filter>Lib_ExternalNet</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx">
-      <Filter>ExternalPipe</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\AIModel\submodel.hxx">
-      <Filter>Lib_AIModel</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx">
-      <Filter>Lib_Traffic</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx">
-      <Filter>Lib_Traffic</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx">
-      <Filter>Lib_Traffic</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx">
-      <Filter>Lib_SP</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx">
-      <Filter>Lib_SP</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx">
-      <Filter>Lib_KLN89</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx">
-      <Filter>Lib_ATC</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx">
-      <Filter>Lib_Flight</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATC\atcutils.hxx">
-      <Filter>Lib_ATC</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\component.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\functor.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\logic.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx">
-      <Filter>Lib_Autopilot</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx">
-      <Filter>Lib_Flight</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx">
-      <Filter>Lib_Environment</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\ATC\atis.hxx">
-      <Filter>Lib_ATC</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\Time\TimeManager.hxx">
-      <Filter>Lib_Time</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h">
-      <Filter>Lib_JSBSim\math</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="..\flightgear.rc" />
-    <ResourceCompile Include="..\flightgear64.rc" />
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuildStep Include="..\flightgear.ico" />
-    <CustomBuildStep Include="..\flightgear64.ico" />
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\..\src\Include\config.h-msvc90" />
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Lib_Aircraft">
+      <UniqueIdentifier>{5b5a7035-1789-4175-be3c-5ba77c37de44}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Airports">
+      <UniqueIdentifier>{8efb426e-e23e-42d6-9e6e-406c51e3a65c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_ATCDCL">
+      <UniqueIdentifier>{7d7c9038-3ad4-4e1f-b67d-d27baa06f8e8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Autopilot">
+      <UniqueIdentifier>{a2116df7-5e2f-40d8-a56f-ef96cdebd6c6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Cockpit">
+      <UniqueIdentifier>{6ed1f548-d273-46c6-a0bb-b9ee2303f481}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Cockpit\build_in">
+      <UniqueIdentifier>{eacbd83d-0087-44ce-a78f-73d5498b2af1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim">
+      <UniqueIdentifier>{d8c4cb07-9e19-43f0-a85a-dcf30b2545c7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim\math">
+      <UniqueIdentifier>{183efdbf-00a8-427a-98da-dec58255128e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim\models">
+      <UniqueIdentifier>{411dbaca-baf6-4170-b100-71a554209935}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim\models\atmosphere">
+      <UniqueIdentifier>{9436baf4-76e7-4226-a161-60eab79eb34b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim\models\flight_control">
+      <UniqueIdentifier>{2487fd19-c144-45be-aea7-289d221345b5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim\models\propulsion">
+      <UniqueIdentifier>{d371bccf-2c19-4079-b535-d031216e8490}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim\input_output">
+      <UniqueIdentifier>{27550555-bc98-408b-b4b0-4ebd297b6a3d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_JSBSim\initialization">
+      <UniqueIdentifier>{b3b2ce93-c999-472a-bfa6-06c1143c7fae}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_LaRCsim">
+      <UniqueIdentifier>{cb4d76a1-7275-4cd6-a305-63636b13ade9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_UIUCModel">
+      <UniqueIdentifier>{ff59ef83-e9a1-46ac-8391-e268a9df0dfc}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_YASim">
+      <UniqueIdentifier>{fabb1c71-61fb-4a57-88da-26945141c440}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Flight">
+      <UniqueIdentifier>{940c9533-0978-40ef-8d39-961d0ad89b4e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_GUI">
+      <UniqueIdentifier>{c9754169-5e10-4035-9544-6294c31d9709}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Input">
+      <UniqueIdentifier>{131a31a9-d8bd-4a93-8cce-4798aa9c9bc9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="main">
+      <UniqueIdentifier>{0c65f02c-7bae-4389-bf94-5e2c67ba0e68}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Navaids">
+      <UniqueIdentifier>{81173da0-37ce-43a2-85a6-0a5efcbfed91}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Network">
+      <UniqueIdentifier>{bae088e3-d112-4668-b653-beb723426c96}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Scenery">
+      <UniqueIdentifier>{6b8abb03-12fe-470a-a3d6-69f2b99cb082}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Sound">
+      <UniqueIdentifier>{56f378cc-a098-4fc1-b6db-708df701363c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Time">
+      <UniqueIdentifier>{10afb571-0a80-4493-9d07-71dbb3e128fb}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Multiplayer">
+      <UniqueIdentifier>{5f18d822-922b-4bc5-a197-1f9c749d3aca}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Environment">
+      <UniqueIdentifier>{da1bf6b6-517a-4d9b-8de2-b43a126426a8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Model">
+      <UniqueIdentifier>{3a8fdd5f-359c-4867-b542-c680216b835b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_UFO">
+      <UniqueIdentifier>{5ecfbcb6-4b64-419f-8e53-f0cf299087bf}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Instrumentation">
+      <UniqueIdentifier>{4d06a2fc-202e-44ed-bf26-22bbef505bc5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Instrumentation\Lib_HUD">
+      <UniqueIdentifier>{1965f1ef-8cc9-40d6-876b-6f1787bd300d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Systems">
+      <UniqueIdentifier>{175c5293-cb40-47ec-bceb-f234bedfd31c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_ExternalNet">
+      <UniqueIdentifier>{bed96b77-e07c-42c9-956a-df71af33a794}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="ExternalPipe">
+      <UniqueIdentifier>{0a02d14a-7bb7-4564-a1b9-7a8f5ccc9cbd}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_AIModel">
+      <UniqueIdentifier>{044334ac-08b1-409d-acd5-b950b9d57ced}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_Traffic">
+      <UniqueIdentifier>{22009ac9-4ac5-4518-afd8-0b237abe6d00}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_SP">
+      <UniqueIdentifier>{9a55973a-7b5a-4fbd-9873-93012209f7e0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_KLN89">
+      <UniqueIdentifier>{8cae8c55-248a-4be4-a389-24f651d7b9ea}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Lib_ATC">
+      <UniqueIdentifier>{8f862bbd-b18e-4576-989c-a9463482781a}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\src\Aircraft\controls.cxx">
+      <Filter>Lib_Aircraft</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Aircraft\replay.cxx">
+      <Filter>Lib_Aircraft</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\dynamics.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\gnnode.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\parking.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\pavement.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\runways.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\sidstar.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\simple.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx">
+      <Filter>Lib_Airports</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\panel.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx">
+      <Filter>Lib_Cockpit\build_in</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp">
+      <Filter>Lib_JSBSim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp">
+      <Filter>Lib_JSBSim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp">
+      <Filter>Lib_JSBSim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx">
+      <Filter>Lib_JSBSim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp">
+      <Filter>Lib_JSBSim\models\atmosphere</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp">
+      <Filter>Lib_JSBSim\models\atmosphere</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp">
+      <Filter>Lib_JSBSim\models\atmosphere</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp">
+      <Filter>Lib_JSBSim\initialization</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp">
+      <Filter>Lib_JSBSim\initialization</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp">
+      <Filter>Lib_JSBSim\initialization</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx">
+      <Filter>Lib_YASim</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\flight.cxx">
+      <Filter>Lib_Flight</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx">
+      <Filter>Lib_Flight</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx">
+      <Filter>Lib_Flight</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\AirportList.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\dialog.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Gui\fonts.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\gui.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\layout-props.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\layout.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\menubar.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\new_gui.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Gui\property_list.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx">
+      <Filter>Lib_GUI</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Input\FGButton.cxx">
+      <Filter>Lib_Input</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx">
+      <Filter>Lib_Input</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx">
+      <Filter>Lib_Input</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx">
+      <Filter>Lib_Input</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx">
+      <Filter>Lib_Input</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx">
+      <Filter>Lib_Input</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Input\input.cxx">
+      <Filter>Lib_Input</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\bootstrap.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\fg_commands.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\fg_init.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\fg_io.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\fg_props.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\fgviewer.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\globals.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\logger.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\main.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\options.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\renderer.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\splash.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\util.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\viewer.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\viewmgr.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\awynet.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\navdb.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\navlist.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\positioned.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\atlas.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\AV400.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\garmin.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\generic.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\httpd.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\joyclient.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\jsclient.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\multiplay.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\native.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\native_fdm.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\native_gui.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\nmea.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\opengc.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\props.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\protocol.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\pve.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\ray.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Network\rul.cxx">
+      <Filter>Lib_Network</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Scenery\redout.cxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Scenery\scenery.cxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Sound\beacon.cxx">
+      <Filter>Lib_Sound</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx">
+      <Filter>Lib_Sound</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Sound\morse.cxx">
+      <Filter>Lib_Sound</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx">
+      <Filter>Lib_Sound</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Sound\voice.cxx">
+      <Filter>Lib_Sound</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Time\light.cxx">
+      <Filter>Lib_Time</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Time\sunsolver.cxx">
+      <Filter>Lib_Time</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx">
+      <Filter>Lib_Multiplayer</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx">
+      <Filter>Lib_Multiplayer</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\environment.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\fgwind.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Model\acmodel.cxx">
+      <Filter>Lib_Model</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Model\model_panel.cxx">
+      <Filter>Lib_Model</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Model\modelmgr.cxx">
+      <Filter>Lib_Model</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Model\panelnode.cxx">
+      <Filter>Lib_Model</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\UFO.cxx">
+      <Filter>Lib_UFO</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Systems\electrical.cxx">
+      <Filter>Lib_Systems</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Systems\pitot.cxx">
+      <Filter>Lib_Systems</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Systems\static.cxx">
+      <Filter>Lib_Systems</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx">
+      <Filter>Lib_Systems</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Systems\vacuum.cxx">
+      <Filter>Lib_Systems</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx">
+      <Filter>Lib_ExternalNet</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx">
+      <Filter>ExternalPipe</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\AIModel\submodel.cxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx">
+      <Filter>Lib_Traffic</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx">
+      <Filter>Lib_Traffic</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx">
+      <Filter>Lib_Traffic</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx">
+      <Filter>Lib_SP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx">
+      <Filter>Lib_SP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx">
+      <Filter>Lib_ATC</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx">
+      <Filter>Lib_Flight</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATC\atcutils.cxx">
+      <Filter>Lib_ATC</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\component.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\logic.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx">
+      <Filter>Lib_Flight</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx">
+      <Filter>Lib_Environment</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\ATC\atis.cxx">
+      <Filter>Lib_ATC</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Time\TimeManager.cxx">
+      <Filter>Lib_Time</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\airways.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\procedure.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\route.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\routePath.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Navaids\waypoint.cxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\src\Instrumentation\rnav_waypt_controller.cxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\src\Aircraft\controls.hxx">
+      <Filter>Lib_Aircraft</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Aircraft\replay.hxx">
+      <Filter>Lib_Aircraft</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\dynamics.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\gnnode.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\parking.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\pavement.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\runways.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\sidstar.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\simple.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx">
+      <Filter>Lib_Airports</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx">
+      <Filter>Lib_ATCDCL</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Cockpit\hud.hxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Cockpit\panel.hxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx">
+      <Filter>Lib_Cockpit</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx">
+      <Filter>Lib_Cockpit\build_in</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h">
+      <Filter>Lib_JSBSim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h">
+      <Filter>Lib_JSBSim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h">
+      <Filter>Lib_JSBSim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx">
+      <Filter>Lib_JSBSim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h">
+      <Filter>Lib_JSBSim\models</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h">
+      <Filter>Lib_JSBSim\models\atmosphere</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h">
+      <Filter>Lib_JSBSim\models\atmosphere</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h">
+      <Filter>Lib_JSBSim\models\flight_control</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h">
+      <Filter>Lib_JSBSim\models\propulsion</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx">
+      <Filter>Lib_JSBSim\input_output</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h">
+      <Filter>Lib_JSBSim\initialization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h">
+      <Filter>Lib_JSBSim\initialization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h">
+      <Filter>Lib_JSBSim\initialization</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h">
+      <Filter>Lib_LaRCsim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h">
+      <Filter>Lib_UIUCModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx">
+      <Filter>Lib_YASim</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\flight.hxx">
+      <Filter>Lib_Flight</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx">
+      <Filter>Lib_Flight</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx">
+      <Filter>Lib_Flight</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\AirportList.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\dialog.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\gui.h">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\layout.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\menubar.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\new_gui.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Gui\property_list.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx">
+      <Filter>Lib_GUI</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Input\FGButton.hxx">
+      <Filter>Lib_Input</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx">
+      <Filter>Lib_Input</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx">
+      <Filter>Lib_Input</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx">
+      <Filter>Lib_Input</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx">
+      <Filter>Lib_Input</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx">
+      <Filter>Lib_Input</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Input\input.hxx">
+      <Filter>Lib_Input</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\fg_commands.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\fg_init.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\fg_io.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\fg_os.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\fg_props.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\fgviewer.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\globals.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\logger.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\main.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\options.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\renderer.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\splash.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\util.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\viewer.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\viewmgr.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx">
+      <Filter>main</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\awynet.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\fix.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\nav.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\navdb.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\navlist.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\positioned.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\atlas.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\AV400.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\garmin.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\generic.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\httpd.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\joyclient.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\jsclient.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\multiplay.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\native.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\native_fdm.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\native_gui.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\net_fdm.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\net_gui.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\nmea.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\opengc.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\opengc_data.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\props.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\protocol.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\pve.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\ray.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Network\rul.hxx">
+      <Filter>Lib_Network</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Scenery\redout.hxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Scenery\scenery.hxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx">
+      <Filter>Lib_Scenery</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Sound\beacon.hxx">
+      <Filter>Lib_Sound</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx">
+      <Filter>Lib_Sound</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Sound\morse.hxx">
+      <Filter>Lib_Sound</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx">
+      <Filter>Lib_Sound</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Sound\voice.hxx">
+      <Filter>Lib_Sound</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Time\light.hxx">
+      <Filter>Lib_Time</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Time\sunsolver.hxx">
+      <Filter>Lib_Time</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx">
+      <Filter>Lib_Multiplayer</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx">
+      <Filter>Lib_Multiplayer</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx">
+      <Filter>Lib_Multiplayer</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\environment.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\fgwind.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Model\acmodel.hxx">
+      <Filter>Lib_Model</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Model\model_panel.hxx">
+      <Filter>Lib_Model</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Model\modelmgr.hxx">
+      <Filter>Lib_Model</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Model\panelnode.hxx">
+      <Filter>Lib_Model</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\UFO.hxx">
+      <Filter>Lib_UFO</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx">
+      <Filter>Lib_Instrumentation\Lib_HUD</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Systems\electrical.hxx">
+      <Filter>Lib_Systems</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Systems\pitot.hxx">
+      <Filter>Lib_Systems</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Systems\static.hxx">
+      <Filter>Lib_Systems</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx">
+      <Filter>Lib_Systems</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Systems\vacuum.hxx">
+      <Filter>Lib_Systems</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx">
+      <Filter>Lib_ExternalNet</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx">
+      <Filter>ExternalPipe</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\AIModel\submodel.hxx">
+      <Filter>Lib_AIModel</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx">
+      <Filter>Lib_Traffic</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx">
+      <Filter>Lib_Traffic</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx">
+      <Filter>Lib_Traffic</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx">
+      <Filter>Lib_SP</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx">
+      <Filter>Lib_SP</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx">
+      <Filter>Lib_KLN89</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx">
+      <Filter>Lib_ATC</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx">
+      <Filter>Lib_Flight</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATC\atcutils.hxx">
+      <Filter>Lib_ATC</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\component.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\functor.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\logic.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx">
+      <Filter>Lib_Autopilot</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx">
+      <Filter>Lib_Flight</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx">
+      <Filter>Lib_Environment</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\ATC\atis.hxx">
+      <Filter>Lib_ATC</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Time\TimeManager.hxx">
+      <Filter>Lib_Time</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h">
+      <Filter>Lib_JSBSim\math</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\airways.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\procedure.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\route.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\routePath.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Navaids\waypoint.hxx">
+      <Filter>Lib_Navaids</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\src\Instrumentation\rnav_waypt_controller.hxx">
+      <Filter>Lib_Instrumentation</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\flightgear.rc" />
+    <ResourceCompile Include="..\flightgear64.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuildStep Include="..\flightgear.ico" />
+    <CustomBuildStep Include="..\flightgear64.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="..\..\..\src\Include\config.h-msvc90" />
+  </ItemGroup>
 </Project>
\ No newline at end of file

From 957a59e57a7be92fd64a0c1278a6f04d0f31d327 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sat, 23 Oct 2010 19:09:08 +0100
Subject: [PATCH 30/45] Investigating an intermittent shutdown crash; fix
 deletion of AIManager.

---
 src/Main/globals.cxx | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx
index ee5fcf2fd..33f36ecc8 100644
--- a/src/Main/globals.cxx
+++ b/src/Main/globals.cxx
@@ -166,8 +166,9 @@ FGGlobals::~FGGlobals()
     // deallocation of AIModel objects. To ensure we can safely
     // shut down all subsystems, make sure we take down the 
     // AIModels system first.
-    subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model");
-
+    SGSubsystem* ai = subsystem_mgr->remove("ai_model");
+    delete ai;
+    
     subsystem_mgr->unbind();
     delete subsystem_mgr;
     

From 984900d84dcfce3ab7708550b79e3c107d8bfce1 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sun, 24 Oct 2010 07:10:02 +0100
Subject: [PATCH 31/45] Make v2 HUD a top-level subsystem, so it can be
 reinit()ed correctly.

---
 src/Instrumentation/instrument_mgr.cxx | 3 ++-
 src/Main/renderer.cxx                  | 4 +---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/Instrumentation/instrument_mgr.cxx b/src/Instrumentation/instrument_mgr.cxx
index 2e3f21e3f..19fcaeb06 100644
--- a/src/Instrumentation/instrument_mgr.cxx
+++ b/src/Instrumentation/instrument_mgr.cxx
@@ -55,7 +55,8 @@ FGInstrumentMgr::FGInstrumentMgr () :
   _explicitGps(false)
 {
     set_subsystem("od_gauge", new FGODGauge);
-    set_subsystem("hud", new HUD);
+    
+    globals->add_subsystem("hud", new HUD, SGSubsystemMgr::DISPLAY);
 }
 
 FGInstrumentMgr::~FGInstrumentMgr ()
diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx
index 0cb00c5ab..388701d67 100644
--- a/src/Main/renderer.cxx
+++ b/src/Main/renderer.cxx
@@ -89,7 +89,6 @@
 #include <Scenery/redout.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <GUI/new_gui.hxx>
-#include <Instrumentation/instrument_mgr.hxx>
 #include <Instrumentation/HUD/HUD.hxx>
 #include <Environment/precipitation_mgr.hxx>
 
@@ -209,8 +208,7 @@ public:
 
     fgCockpitUpdate(&state);
 
-    FGInstrumentMgr *instr = static_cast<FGInstrumentMgr*>(globals->get_subsystem("instrumentation"));
-    HUD *hud = static_cast<HUD*>(instr->get_subsystem("hud"));
+    HUD *hud = static_cast<HUD*>(globals->get_subsystem("hud"));
     hud->draw(state);
 
     // update the panel subsystem

From 0e53e2cbb1e7f511c40121ade43a539d15e0e155 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sat, 23 Oct 2010 20:37:26 +0100
Subject: [PATCH 32/45] PLIB net removed from FlightGear

---
 src/FDM/ExternalNet/ExternalNet.cxx | 44 +++++++++++++++++++++++++
 src/FDM/ExternalNet/ExternalNet.hxx | 51 ++---------------------------
 src/Main/Makefile.am                |  7 ++--
 src/Main/main.cxx                   |  5 +--
 src/MultiPlayer/multiplaymgr.cxx    |  9 +++--
 src/MultiPlayer/multiplaymgr.hxx    | 10 +++---
 src/MultiPlayer/tiny_xdr.cxx        |  3 --
 src/Network/ATC-Main.hxx            |  2 --
 src/Network/httpd.cxx               |  2 +-
 src/Network/httpd.hxx               | 10 +++---
 src/Network/jpg-httpd.cxx           |  2 +-
 src/Network/jpg-httpd.hxx           | 10 +++---
 src/Network/props.cxx               | 16 ++++-----
 src/Network/props.hxx               |  9 ++---
 utils/TerraSync/Makefile.am         |  8 +----
 utils/TerraSync/terrasync.cxx       | 14 ++++----
 16 files changed, 93 insertions(+), 109 deletions(-)

diff --git a/src/FDM/ExternalNet/ExternalNet.cxx b/src/FDM/ExternalNet/ExternalNet.cxx
index 741bb3b78..7a3a14156 100644
--- a/src/FDM/ExternalNet/ExternalNet.cxx
+++ b/src/FDM/ExternalNet/ExternalNet.cxx
@@ -26,6 +26,7 @@
 
 #include <simgear/debug/logstream.hxx>
 #include <simgear/io/lowlevel.hxx> // endian tests
+#include <simgear/io/sg_netBuffer.hxx>
 
 #include <Main/fg_props.hxx>
 #include <Network/native_ctrls.hxx>
@@ -34,6 +35,49 @@
 #include "ExternalNet.hxx"
 
 
+class HTTPClient : public simgear::NetBufferChannel
+{
+
+    bool done;
+    SGTimeStamp start;
+
+public:
+
+    HTTPClient ( const char* host, int port, const char* path ) :
+        done( false )
+    {
+	open ();
+	connect (host, port);
+
+  char buffer[256];
+  ::snprintf (buffer, 256, "GET %s HTTP/1.0\r\n\r\n", path );
+	bufferSend(buffer, strlen(buffer) ) ;
+
+        start.stamp();
+    }
+
+    virtual void handleBufferRead (simgear::NetBuffer& buffer)
+    {
+	const char* s = buffer.getData();
+	while (*s)
+	    fputc(*s++,stdout);
+
+	printf("done\n");
+	buffer.remove();
+	printf("after buffer.remove()\n");
+        done = true;
+    }
+
+    bool isDone() const { return done; }
+    bool isDone( long usec ) const { 
+        if ( start + SGTimeStamp::fromUSec(usec) < SGTimeStamp::now() ) {
+            return true;
+        } else {
+            return done;
+        }
+    }
+};
+
 FGExternalNet::FGExternalNet( double dt, string host, int dop, int dip, int cp )
 {
 //     set_delta_t( dt );
diff --git a/src/FDM/ExternalNet/ExternalNet.hxx b/src/FDM/ExternalNet/ExternalNet.hxx
index 92d76a322..a3f80891a 100644
--- a/src/FDM/ExternalNet/ExternalNet.hxx
+++ b/src/FDM/ExternalNet/ExternalNet.hxx
@@ -23,59 +23,14 @@
 #ifndef _EXTERNAL_NET_HXX
 #define _EXTERNAL_NET_HXX
 
-#include <plib/netBuffer.h>
-#include <plib/netSocket.h>
-
 #include <simgear/timing/timestamp.hxx> // fine grained timing measurements
+#include <simgear/io/raw_socket.hxx>
 
 #include <Network/net_ctrls.hxx>
 #include <Network/net_fdm.hxx>
 #include <FDM/flight.hxx>
 
 
-class HTTPClient : public netBufferChannel
-{
-
-    bool done;
-    SGTimeStamp start;
-
-public:
-
-    HTTPClient ( const char* host, int port, const char* path ) :
-        done( false )
-    {
-	open ();
-	connect (host, port);
-
-	const char* s = netFormat ( "GET %s HTTP/1.0\r\n\r\n", path );
-	bufferSend( s, strlen(s) ) ;
-
-        start.stamp();
-    }
-
-    virtual void handleBufferRead (netBuffer& buffer)
-    {
-	const char* s = buffer.getData();
-	while (*s)
-	    fputc(*s++,stdout);
-
-	printf("done\n");
-	buffer.remove();
-	printf("after buffer.remove()\n");
-        done = true;
-    }
-
-    bool isDone() const { return done; }
-    bool isDone( long usec ) const { 
-        if ( start + SGTimeStamp::fromUSec(usec) < SGTimeStamp::now() ) {
-            return true;
-        } else {
-            return done;
-        }
-    }
-};
-
-
 class FGExternalNet: public FGInterface {
 
 private:
@@ -85,8 +40,8 @@ private:
     int cmd_port;
     string fdm_host;
 
-    netSocket data_client;
-    netSocket data_server;
+    simgear::Socket data_client;
+    simgear::Socket data_server;
 
     bool valid;
 
diff --git a/src/Main/Makefile.am b/src/Main/Makefile.am
index bafc88324..b7d7ed87c 100644
--- a/src/Main/Makefile.am
+++ b/src/Main/Makefile.am
@@ -24,11 +24,9 @@ endif
 
 if HAVE_FRAMEWORK_PLIB
 fgfs_PLIB_FW = $(plib_FRAMEWORK)
-metar_PLIB_FW = $(plib_FRAMEWORK)
 else
-fgfs_PLIB_LIBS = -lplibpuaux -lplibpu -lplibfnt -lplibjs -lplibnet \
+fgfs_PLIB_LIBS = -lplibpuaux -lplibpu -lplibfnt -lplibjs  \
 	-lplibsg -lplibul 
-metar_PLIB_LIBS = -lplibnet -lplibul 
 endif
 
 if HAVE_FRAMEWORK_OSG
@@ -133,9 +131,8 @@ metar_SOURCES = metar_main.cxx
 
 metar_LDADD = \
         -lsgenvironment -lsgio -lsgbucket -lsgmisc -lsgstructure -lsgdebug \
-        $(metar_PLIB_LIBS) $(network_LIBS) \
+        $(network_LIBS) \
         -lz $(base_LIBS)
 
-metar_LDFLAGS = $(metar_PLIB_FW)
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src
diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 8849644b3..fc28ce963 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -48,6 +48,7 @@
 #include <simgear/props/props.hxx>
 #include <simgear/timing/sg_time.hxx>
 #include <simgear/math/sg_random.h>
+#include <simgear/io/raw_socket.hxx>
 
 #include <Time/light.hxx>
 #include <Aircraft/replay.hxx>
@@ -588,8 +589,8 @@ int fgMainInit( int argc, char **argv ) {
     fgRegisterIdleHandler( &fgIdleFunction );
     fgRegisterDrawHandler( &FGRenderer::update );
 
-    // Initialize plib net interface
-    netInit( &argc, argv );
+    // Initialize sockets (WinSock needs this)
+    simgear::Socket::initSockets();
 
     // Clouds3D requires an alpha channel
     fgOSOpenWindow(true /* request stencil buffer */);
diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx
index 317d2df41..27c455c25 100644
--- a/src/MultiPlayer/multiplaymgr.cxx
+++ b/src/MultiPlayer/multiplaymgr.cxx
@@ -35,7 +35,6 @@
 #include <algorithm>
 #include <cstring>
 #include <osg/Math>             // isNaN
-#include <plib/netSocket.h>
 
 #include <simgear/misc/stdint.hxx>
 #include <simgear/timing/timestamp.hxx>
@@ -411,7 +410,7 @@ FGMultiplayMgr::init (void)
   SG_LOG(SG_NETWORK,SG_INFO,"FGMultiplayMgr::init-callsign= "<<mCallsign);
   Close(); // Should Init be called twice, close Socket first
            // A memory leak was reported here by valgrind
-  mSocket = new netSocket();
+  mSocket = new simgear::Socket();
   if (!mSocket->open(false)) {
     SG_LOG( SG_NETWORK, SG_DEBUG,
             "FGMultiplayMgr::init - Failed to create data socket" );
@@ -731,7 +730,7 @@ FGMultiplayMgr::update(double)
     //  returned will only be that of the next
     //  packet waiting to be processed.
     //////////////////////////////////////////////////
-    netAddress SenderAddress;
+    simgear::IPAddress SenderAddress;
     bytes = mSocket->recvfrom(msgBuf.Msg, sizeof(msgBuf.Msg), 0,
                               &SenderAddress);
     //////////////////////////////////////////////////
@@ -815,7 +814,7 @@ FGMultiplayMgr::update(double)
 //////////////////////////////////////////////////////////////////////
 void
 FGMultiplayMgr::ProcessPosMsg(const FGMultiplayMgr::MsgBuf& Msg,
-                              const netAddress& SenderAddress, long stamp)
+                              const simgear::IPAddress& SenderAddress, long stamp)
 {
   const T_MsgHdr* MsgHdr = Msg.msgHdr();
   if (MsgHdr->MsgLen < sizeof(T_MsgHdr) + sizeof(T_PositionMsg)) {
@@ -965,7 +964,7 @@ FGMultiplayMgr::ProcessPosMsg(const FGMultiplayMgr::MsgBuf& Msg,
 //////////////////////////////////////////////////////////////////////
 void
 FGMultiplayMgr::ProcessChatMsg(const MsgBuf& Msg,
-                               const netAddress& SenderAddress)
+                               const simgear::IPAddress& SenderAddress)
 {
   const T_MsgHdr* MsgHdr = Msg.msgHdr();
   if (MsgHdr->MsgLen < sizeof(T_MsgHdr) + 1) {
diff --git a/src/MultiPlayer/multiplaymgr.hxx b/src/MultiPlayer/multiplaymgr.hxx
index b2417f8dd..5a08e1aab 100644
--- a/src/MultiPlayer/multiplaymgr.hxx
+++ b/src/MultiPlayer/multiplaymgr.hxx
@@ -38,8 +38,8 @@
 
 #include <simgear/compiler.h>
 #include <simgear/props/props.hxx>
-#include <plib/netSocket.h>
 #include <Main/globals.hxx>
+#include <simgear/io/raw_socket.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 
 #include <AIModel/AIMultiplayer.hxx>
@@ -78,16 +78,16 @@ private:
                                   const std::string& modelName);
   FGAIMultiplayer* getMultiplayer(const std::string& callsign);
   void FillMsgHdr(T_MsgHdr *MsgHdr, int iMsgId, unsigned _len = 0u);
-  void ProcessPosMsg(const MsgBuf& Msg, const netAddress& SenderAddress,
+  void ProcessPosMsg(const MsgBuf& Msg, const simgear::IPAddress& SenderAddress,
                      long stamp);
-  void ProcessChatMsg(const MsgBuf& Msg, const netAddress& SenderAddress);
+  void ProcessChatMsg(const MsgBuf& Msg, const simgear::IPAddress& SenderAddress);
 
   /// maps from the callsign string to the FGAIMultiplayer
   typedef std::map<std::string, SGSharedPtr<FGAIMultiplayer> > MultiPlayerMap;
   MultiPlayerMap mMultiPlayerMap;
 
-  netSocket* mSocket;
-  netAddress mServer;
+  simgear::Socket* mSocket;
+  simgear::IPAddress mServer;
   bool mHaveServer;
   bool mInitialised;
   std::string mCallsign;
diff --git a/src/MultiPlayer/tiny_xdr.cxx b/src/MultiPlayer/tiny_xdr.cxx
index b0c57d3a7..e8f292141 100644
--- a/src/MultiPlayer/tiny_xdr.cxx
+++ b/src/MultiPlayer/tiny_xdr.cxx
@@ -13,9 +13,6 @@
 
 #include <string>
 
-#include <plib/ul.h>
-#include <plib/netSocket.h>
-
 #include "tiny_xdr.hxx"
 
 /* XDR 8bit integers */
diff --git a/src/Network/ATC-Main.hxx b/src/Network/ATC-Main.hxx
index f72bd8da5..b6adc73ef 100644
--- a/src/Network/ATC-Main.hxx
+++ b/src/Network/ATC-Main.hxx
@@ -28,8 +28,6 @@
 #  include <config.h>
 #endif
 
-#include <plib/netChat.h>
-
 #include <simgear/misc/sg_path.hxx>
 
 #include <Main/fg_props.hxx>
diff --git a/src/Network/httpd.cxx b/src/Network/httpd.cxx
index 7adc4214d..e2e6a918f 100644
--- a/src/Network/httpd.cxx
+++ b/src/Network/httpd.cxx
@@ -66,7 +66,7 @@ bool FGHttpd::open() {
 
 
 bool FGHttpd::process() {
-    netChannel::poll();
+    simgear::NetChannel::poll();
 
     return true;
 }
diff --git a/src/Network/httpd.hxx b/src/Network/httpd.hxx
index 487ddd3f2..580097ffb 100644
--- a/src/Network/httpd.hxx
+++ b/src/Network/httpd.hxx
@@ -32,7 +32,7 @@
 #  include <config.h>
 #endif
 
-#include <plib/netChat.h>
+#include <simgear/io/sg_netChat.hxx>
 
 #include "protocol.hxx"
 
@@ -40,10 +40,10 @@
 /* simple httpd server that makes an hasty stab at following the http
    1.1 rfc.  */
 
-class HttpdChannel : public netChat
+class HttpdChannel : public simgear::NetChat
 {
 
-    netBuffer buffer ;
+    simgear::NetBuffer buffer ;
 
     string urlEncode(string);
     string urlDecode(string);
@@ -61,12 +61,12 @@ public:
 } ;
 
 
-class HttpdServer : private netChannel
+class HttpdServer : private simgear::NetChannel
 {
     virtual bool writable (void) { return false ; }
 
     virtual void handleAccept (void) {
-        netAddress addr ;
+        simgear::IPAddress addr ;
         int handle = accept ( &addr ) ;
         SG_LOG( SG_IO, SG_INFO, "Client " << addr.getHost() << ":" << addr.getPort() << " connected" );
 
diff --git a/src/Network/jpg-httpd.cxx b/src/Network/jpg-httpd.cxx
index abf2911e3..ba5e5e3c2 100644
--- a/src/Network/jpg-httpd.cxx
+++ b/src/Network/jpg-httpd.cxx
@@ -75,7 +75,7 @@ bool FGJpegHttpd::open() {
 
 
 bool FGJpegHttpd::process() {
-    netChannel::poll();
+    simgear::NetChannel::poll();
 
     return true;
 }
diff --git a/src/Network/jpg-httpd.hxx b/src/Network/jpg-httpd.hxx
index 1628dff7b..e4fde9e9b 100644
--- a/src/Network/jpg-httpd.hxx
+++ b/src/Network/jpg-httpd.hxx
@@ -32,7 +32,7 @@
 #  include <config.h>
 #endif
 
-#include <plib/netChat.h>
+#include <simgear/io/sg_netChat.hxx>
 
 #ifdef FG_JPEG_SERVER
 #  include <simgear/screen/jpgfactory.hxx>
@@ -57,10 +57,10 @@ class trJpgFactory;
 /* simple httpd server that makes an hasty stab at following the http
    1.1 rfc.  */
 
-class HttpdImageChannel : public netChat
+class HttpdImageChannel : public simgear::NetChat
 {
 
-    netBuffer buffer ;
+    simgear::NetBuffer buffer ;
     trJpgFactory *JpgFactory;
     
 public:
@@ -89,12 +89,12 @@ public:
 };
 
 
-class HttpdImageServer : private netChannel
+class HttpdImageServer : private simgear::NetChannel
 {
     virtual bool writable (void) { return false ; }
 
     virtual void handleAccept (void) {
-        netAddress addr ;
+        simgear::IPAddress addr ;
         int handle = accept ( &addr ) ;
         SG_LOG( SG_IO, SG_INFO, "Client " << addr.getHost() << ":" << addr.getPort() << " connected" );
 
diff --git a/src/Network/props.cxx b/src/Network/props.cxx
index e6760eaff..5b9eb7a1a 100644
--- a/src/Network/props.cxx
+++ b/src/Network/props.cxx
@@ -40,7 +40,7 @@
 #include <Main/globals.hxx>
 #include <Main/viewmgr.hxx>
 
-#include <plib/netChat.h>
+#include <simgear/io/sg_netChat.hxx>
 
 #include "props.hxx"
 
@@ -54,9 +54,9 @@ using std::endl;
  * Props connection class.
  * This class represents a connection to props client.
  */
-class PropsChannel : public netChat
+class PropsChannel : public simgear::NetChat
 {
-    netBuffer buffer;
+    simgear::NetBuffer buffer;
 
     /**
      * Current property node name.
@@ -471,9 +471,9 @@ FGProps::open()
         return false;
     }
 
-    netChannel::open();
-    netChannel::bind( "", port );
-    netChannel::listen( 5 );
+    simgear::NetChannel::open();
+    simgear::NetChannel::bind( "", port );
+    simgear::NetChannel::listen( 5 );
     SG_LOG( SG_IO, SG_INFO, "Props server started on port " << port );
 
     set_enabled( true );
@@ -496,7 +496,7 @@ FGProps::close()
 bool
 FGProps::process()
 {
-    netChannel::poll();
+    simgear::NetChannel::poll();
     return true;
 }
 
@@ -506,7 +506,7 @@ FGProps::process()
 void
 FGProps::handleAccept()
 {
-    netAddress addr;
+    simgear::IPAddress addr;
     int handle = accept( &addr );
     SG_LOG( SG_IO, SG_INFO, "Props server accepted connection from "
             << addr.getHost() << ":" << addr.getPort() );
diff --git a/src/Network/props.hxx b/src/Network/props.hxx
index bb661aed1..e55f7c133 100644
--- a/src/Network/props.hxx
+++ b/src/Network/props.hxx
@@ -30,10 +30,7 @@
 #include <string>
 #include <vector>
 
-using std::string;
-using std::vector;
-
-#include <plib/netChannel.h>
+#include <simgear/io/sg_netChannel.hxx>
 
 #include "protocol.hxx"
 
@@ -43,7 +40,7 @@ using std::vector;
  * FlightGear properties.
  */
 class FGProps : public FGProtocol,
-		public netChannel
+		public simgear::NetChannel
 {
 private:
 
@@ -58,7 +55,7 @@ public:
      * 
      * @param tokens Tokenized configuration parameters
      */
-    FGProps( const vector<string>& tokens );
+    FGProps( const std::vector<std::string>& tokens );
 
     /**
      * Destructor.
diff --git a/utils/TerraSync/Makefile.am b/utils/TerraSync/Makefile.am
index 0b71b9ea4..7106cc72f 100644
--- a/utils/TerraSync/Makefile.am
+++ b/utils/TerraSync/Makefile.am
@@ -6,10 +6,4 @@ terrasync_SOURCES = terrasync.cxx
 
 AM_CPPFLAGS = $(svn_CPPFLAGS)
 
-if HAVE_FRAMEWORK_PLIB
-terrasync_LDFLAGS = $(plib_FRAMEWORK)
-else
-terrasync_PLIB_LIBS = -lplibnet -lplibul  
-endif
-
-terrasync_LDADD = $(terrasync_PLIB_LIBS) -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS)
+terrasync_LDADD = -lsgio -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS)
diff --git a/utils/TerraSync/terrasync.cxx b/utils/TerraSync/terrasync.cxx
index c8138e708..0628e2aef 100644
--- a/utils/TerraSync/terrasync.cxx
+++ b/utils/TerraSync/terrasync.cxx
@@ -47,9 +47,7 @@
 #include <deque>
 #include <map>
 
-#include <plib/netSocket.h>
-#include <plib/ul.h>
-
+#include <simgear/io/raw_socket.hxx>
 #include <simgear/bucket/newbucket.hxx>
 #include <simgear/misc/sg_path.hxx>
 
@@ -115,7 +113,7 @@ static void usage( const string& prog ) {
 deque<string> waitingTiles;
 typedef map<string,time_t> CompletedTiles;
 CompletedTiles completedTiles;
-netSocket theSocket;
+simgear::Socket theSocket;
 
 #ifdef HAVE_SVN_CLIENT_H
 
@@ -513,7 +511,7 @@ int main( int argc, char **argv ) {
     }
     
     // Must call this before any other net stuff
-    netInit( &argc,argv );
+    simgear::Socket::initSockets();
 
     if ( ! theSocket.open( false ) ) {  // open a UDP socket
         printf("error opening socket\n");
@@ -624,7 +622,11 @@ int main( int argc, char **argv ) {
 	    terminating = true;
 	} else
 
-        ulSleep( 1 );
+        #ifdef _WIN32
+                Sleep(1000);
+#else
+	        sleep(1);
+#endif
     } // while !terminating
         
     return 0;

From 7ccba95b9c2fd4a6b2e4491dee26c951f748ce82 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sun, 24 Oct 2010 01:09:06 +0100
Subject: [PATCH 33/45] Remove direct uses of PLIB ulXXX functions

---
 src/Airports/dynamics.cxx              |  2 -
 src/GUI/new_gui.cxx                    | 88 ++++++++------------------
 src/GUI/new_gui.hxx                    |  2 +-
 src/Input/FGCommonInput.hxx            |  1 -
 src/Input/FGDeviceConfigurationMap.cxx | 38 +++++------
 src/Input/FGDeviceConfigurationMap.hxx |  5 +-
 src/Network/ATC-Main.cxx               |  4 +-
 src/Traffic/TrafficMgr.cxx             | 46 ++++----------
 8 files changed, 62 insertions(+), 124 deletions(-)

diff --git a/src/Airports/dynamics.cxx b/src/Airports/dynamics.cxx
index f5ebd05d1..11cb454b9 100644
--- a/src/Airports/dynamics.cxx
+++ b/src/Airports/dynamics.cxx
@@ -26,8 +26,6 @@
 
 #include <simgear/compiler.h>
 
-#include <plib/ul.h>
-
 #include <Environment/environment_mgr.hxx>
 #include <Environment/environment.hxx>
 #include <simgear/misc/sg_path.hxx>
diff --git a/src/GUI/new_gui.cxx b/src/GUI/new_gui.cxx
index 034484e27..0e6346f0c 100644
--- a/src/GUI/new_gui.cxx
+++ b/src/GUI/new_gui.cxx
@@ -10,14 +10,13 @@
 #include <iostream>
 #include <cstring>
 #include <sys/types.h>
-#include <plib/ul.h>
 
 #include <plib/pu.h>
-#include <plib/ul.h>
 
 #include <simgear/compiler.h>
 #include <simgear/structure/exception.hxx>
 #include <simgear/props/props_io.hxx>
+#include <simgear/misc/sg_dir.hxx>
 
 #include <boost/algorithm/string/case_conv.hpp>
 
@@ -56,11 +55,8 @@ void
 NewGUI::init ()
 {
     setStyle();
-    char path1[1024];
-    char path2[1024];
-    ulMakePath(path1, globals->get_fg_root().c_str(), "gui");
-    ulMakePath(path2, path1, "dialogs");
-    readDir(path2);
+    SGPath p(globals->get_fg_root(), "gui/dialogs");
+    readDir(p);
     _menubar->init();
 }
 
@@ -233,19 +229,6 @@ NewGUI::setMenuBarVisible (bool visible)
         _menubar->hide();
 }
 
-static bool
-test_extension (const char * path, const char * ext)
-{
-    int pathlen = strlen(path);
-    int extlen = strlen(ext);
-
-    for (int i = 1; i <= pathlen && i <= extlen; i++) {
-        if (path[pathlen-i] != ext[extlen-i])
-            return false;
-    }
-    return true;
-}
-
 void
 NewGUI::newDialog (SGPropertyNode* props)
 {
@@ -260,49 +243,34 @@ NewGUI::newDialog (SGPropertyNode* props)
 }
 
 void
-NewGUI::readDir (const char * path)
+NewGUI::readDir (const SGPath& path)
 {
-    ulDir * dir = ulOpenDir(path);
+    simgear::Dir dir(path);
+    simgear::PathList xmls = dir.children(simgear::Dir::TYPE_FILE, ".xml");
+    
+    for (unsigned int i=0; i<xmls.size(); ++i) {
+      SGPropertyNode * props = new SGPropertyNode;
+      try {
+          readProperties(xmls[i].str(), props);
+      } catch (const sg_exception &) {
+          SG_LOG(SG_INPUT, SG_ALERT, "Error parsing dialog "
+                 << xmls[i].str());
+          delete props;
+          continue;
+      }
+      SGPropertyNode *nameprop = props->getNode("name");
+      if (!nameprop) {
+          SG_LOG(SG_INPUT, SG_WARN, "dialog " << xmls[i].str()
+             << " has no name; skipping.");
+          delete props;
+          continue;
+      }
+      string name = nameprop->getStringValue();
+      if (_dialog_props[name])
+          delete (SGPropertyNode *)_dialog_props[name];
 
-    if (dir == 0) {
-        SG_LOG(SG_GENERAL, SG_ALERT, "Failed to read GUI files from "
-               << path);
-        return;
+      _dialog_props[name] = props;
     }
-
-    for (ulDirEnt * dirEnt = ulReadDir(dir);
-         dirEnt != 0;
-         dirEnt = ulReadDir(dir)) {
-
-        char subpath[1024];
-
-        ulMakePath(subpath, path, dirEnt->d_name);
-
-        if (!dirEnt->d_isdir && test_extension(subpath, ".xml")) {
-            SGPropertyNode * props = new SGPropertyNode;
-            try {
-                readProperties(subpath, props);
-            } catch (const sg_exception &) {
-                SG_LOG(SG_INPUT, SG_ALERT, "Error parsing dialog "
-                       << subpath);
-                delete props;
-                continue;
-            }
-            SGPropertyNode *nameprop = props->getNode("name");
-            if (!nameprop) {
-                SG_LOG(SG_INPUT, SG_WARN, "dialog " << subpath
-                   << " has no name; skipping.");
-                delete props;
-                continue;
-            }
-            string name = nameprop->getStringValue();
-            if (_dialog_props[name])
-                delete (SGPropertyNode *)_dialog_props[name];
-
-            _dialog_props[name] = props;
-        }
-    }
-    ulCloseDir(dir);
 }
 
 
diff --git a/src/GUI/new_gui.hxx b/src/GUI/new_gui.hxx
index 5932512fd..0797d53a6 100644
--- a/src/GUI/new_gui.hxx
+++ b/src/GUI/new_gui.hxx
@@ -219,7 +219,7 @@ private:
     void clear_colors();
 
     // Read all the configuration files in a directory.
-    void readDir (const char * path);
+    void readDir (const SGPath& path);
 
     FGMenuBar * _menubar;
     FGDialog * _active_dialog;
diff --git a/src/Input/FGCommonInput.hxx b/src/Input/FGCommonInput.hxx
index 046ce8264..558510021 100644
--- a/src/Input/FGCommonInput.hxx
+++ b/src/Input/FGCommonInput.hxx
@@ -27,7 +27,6 @@
 
 #include <vector>
 #include <simgear/structure/SGBinding.hxx>
-#include <plib/ul.h>
 
 #if defined( UL_WIN32 )
 #define TGT_PLATFORM	"windows"
diff --git a/src/Input/FGDeviceConfigurationMap.cxx b/src/Input/FGDeviceConfigurationMap.cxx
index 5ad2a0bd7..b8ce13505 100644
--- a/src/Input/FGDeviceConfigurationMap.cxx
+++ b/src/Input/FGDeviceConfigurationMap.cxx
@@ -30,8 +30,7 @@
 
 #include "FGDeviceConfigurationMap.hxx"
 
-#include <plib/ul.h>
-
+#include <simgear/misc/sg_dir.hxx>
 #include <simgear/props/props_io.hxx>
 #include <Main/globals.hxx>
 
@@ -41,11 +40,8 @@ FGDeviceConfigurationMap::FGDeviceConfigurationMap( const char * relative_path,
   base(aBase),
   childname(aChildname)
 {
-  SGPath path(globals->get_fg_root());
-  path.append( relative_path );
-
   int index = 1000;
-  scan_dir( path, &index);
+  scan_dir( SGPath(globals->get_fg_root(), relative_path), &index);
 
   PropertyList childNodes = base->getChildren(childname);
   for (int k = (int)childNodes.size() - 1; k >= 0; k--) {
@@ -62,26 +58,22 @@ FGDeviceConfigurationMap::~FGDeviceConfigurationMap()
   base->removeChildren( childname );
 }
 
-void FGDeviceConfigurationMap::scan_dir( SGPath & path, int *index)
+void FGDeviceConfigurationMap::scan_dir(const SGPath & path, int *index)
 {
-  ulDir *dir = ulOpenDir(path.c_str());
-  if (dir) {
-    ulDirEnt* dent;
-    while ((dent = ulReadDir(dir)) != 0) {
-      if (dent->d_name[0] == '.')
-        continue;
+  simgear::Dir dir(path);
+  simgear::PathList children = dir.children(simgear::Dir::TYPE_FILE | 
+    simgear::Dir::TYPE_DIR | simgear::Dir::NO_DOT_OR_DOTDOT);
 
-      SGPath p(path.str());
-      p.append(dent->d_name);
-      scan_dir(p, index);
+  for (unsigned int c=0; c<children.size(); ++c) {
+    SGPath path(children[c]);
+    if (path.isDir()) {
+      scan_dir(path, index);
+    } else if (path.extension() == "xml") {
+      SG_LOG(SG_INPUT, SG_DEBUG, "Reading joystick file " << path.str());
+      SGPropertyNode_ptr n = base->getChild(childname, (*index)++, true);
+      readProperties(path.str(), n);
+      n->setStringValue("source", path.c_str());
     }
-    ulCloseDir(dir);
-
-  } else if (path.extension() == "xml") {
-    SG_LOG(SG_INPUT, SG_DEBUG, "Reading joystick file " << path.str());
-    SGPropertyNode_ptr n = base->getChild(childname, (*index)++, true);
-    readProperties(path.str(), n);
-    n->setStringValue("source", path.c_str());
   }
 }
 
diff --git a/src/Input/FGDeviceConfigurationMap.hxx b/src/Input/FGDeviceConfigurationMap.hxx
index e89addc96..6a6aceae3 100644
--- a/src/Input/FGDeviceConfigurationMap.hxx
+++ b/src/Input/FGDeviceConfigurationMap.hxx
@@ -30,16 +30,17 @@
 #endif
 
 #include <simgear/props/props.hxx>
-#include <simgear/misc/sg_path.hxx>
 
 #include <map>
 
+class SGPath;
+
 class FGDeviceConfigurationMap : public std::map<std::string,SGPropertyNode_ptr> {
 public:
   FGDeviceConfigurationMap ( const char * relative_path, SGPropertyNode_ptr base, const char * childname );
   virtual ~FGDeviceConfigurationMap();
 private:
-  void scan_dir( SGPath & path, int *index);
+  void scan_dir(const SGPath & path, int *index);
   SGPropertyNode_ptr base;
   const char * childname;
 };
diff --git a/src/Network/ATC-Main.cxx b/src/Network/ATC-Main.cxx
index b70b4abf3..bdaf70936 100644
--- a/src/Network/ATC-Main.cxx
+++ b/src/Network/ATC-Main.cxx
@@ -31,6 +31,8 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <errno.h>
+
 #include <stdio.h>              //snprintf
 #ifdef _WIN32
 #  include <io.h>                 //lseek, read, write
@@ -38,8 +40,6 @@
 
 #include <string>
 
-#include <plib/ul.h>
-
 #include <simgear/debug/logstream.hxx>
 #include <simgear/props/props_io.hxx>
 #include <simgear/io/iochannel.hxx>
diff --git a/src/Traffic/TrafficMgr.cxx b/src/Traffic/TrafficMgr.cxx
index 615bb6c8c..d9fcb6fff 100644
--- a/src/Traffic/TrafficMgr.cxx
+++ b/src/Traffic/TrafficMgr.cxx
@@ -51,10 +51,9 @@
 #include <vector>
 #include <algorithm>
 
-#include <plib/ul.h>
-
 #include <simgear/compiler.h>
 #include <simgear/misc/sg_path.hxx>
+#include <simgear/misc/sg_dir.hxx>
 #include <simgear/props/props.hxx>
 #include <simgear/route/waypoint.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
@@ -126,41 +125,22 @@ FGTrafficManager::~FGTrafficManager()
 
 void FGTrafficManager::init()
 {
-    ulDir *d, *d2;
-    ulDirEnt *dent, *dent2;
-
     heuristicsVector heuristics;
     HeuristicMap heurMap;
 
     if (string(fgGetString("/sim/traffic-manager/datafile")) == string("")) {
-        SGPath aircraftDir = globals->get_fg_root();
-        SGPath path = aircraftDir;
-
-        aircraftDir.append("AI/Traffic");
-        if ((d = ulOpenDir(aircraftDir.c_str())) != NULL) {
-            while ((dent = ulReadDir(d)) != NULL) {
-                if (string(dent->d_name) != string(".") &&
-                    string(dent->d_name) != string("..") && dent->d_isdir) {
-                    SGPath currACDir = aircraftDir;
-                    currACDir.append(dent->d_name);
-                    if ((d2 = ulOpenDir(currACDir.c_str())) == NULL)
-                        return;
-                    while ((dent2 = ulReadDir(d2)) != NULL) {
-                        SGPath currFile = currACDir;
-                        currFile.append(dent2->d_name);
-                        if (currFile.extension() == string("xml")) {
-                            SGPath currFile = currACDir;
-                            currFile.append(dent2->d_name);
-                            SG_LOG(SG_GENERAL, SG_DEBUG,
-                                   "Scanning " << currFile.
-                                   str() << " for traffic");
-                            readXML(currFile.str(), *this);
-                        }
-                    }
-                    ulCloseDir(d2);
-                }
-            }
-            ulCloseDir(d);
+        simgear::Dir trafficDir(SGPath(globals->get_fg_root(), "AI/Traffic"));
+        simgear::PathList d = trafficDir.children(simgear::Dir::TYPE_DIR | simgear::Dir::NO_DOT_OR_DOTDOT);
+        
+        for (unsigned int i=0; i<d.size(); ++i) {
+          simgear::Dir d2(d[i]);
+          simgear::PathList trafficFiles = d2.children(simgear::Dir::TYPE_FILE, ".xml");
+          for (unsigned int j=0; j<trafficFiles.size(); ++j) {
+            SGPath curFile = trafficFiles[j];
+            SG_LOG(SG_GENERAL, SG_DEBUG,
+                  "Scanning " << curFile.str() << " for traffic");
+            readXML(curFile.str(), *this);
+          }
         }
     } else {
         fgSetBool("/sim/traffic-manager/heuristics", false);

From db4b84bc5c72025021eb4139148919ac55df3687 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sun, 24 Oct 2010 07:09:05 +0100
Subject: [PATCH 34/45] Convert nasal directory() helper to use simgear::Dir

---
 src/Scripting/NasalSys.cxx | 39 ++++++++++++++++++--------------------
 1 file changed, 18 insertions(+), 21 deletions(-)

diff --git a/src/Scripting/NasalSys.cxx b/src/Scripting/NasalSys.cxx
index 17fdb67d5..72c964c04 100644
--- a/src/Scripting/NasalSys.cxx
+++ b/src/Scripting/NasalSys.cxx
@@ -14,12 +14,11 @@
 #include <fstream>
 #include <sstream>
 
-#include <plib/ul.h>
-
 #include <simgear/nasal/nasal.h>
 #include <simgear/props/props.hxx>
 #include <simgear/math/sg_random.h>
 #include <simgear/misc/sg_path.hxx>
+#include <simgear/misc/sg_dir.hxx>
 #include <simgear/misc/interpolator.hxx>
 #include <simgear/scene/material/mat.hxx>
 #include <simgear/structure/commands.hxx>
@@ -364,15 +363,17 @@ static naRef f_directory(naContext c, naRef me, int argc, naRef* args)
 {
     if(argc != 1 || !naIsString(args[0]))
         naRuntimeError(c, "bad arguments to directory()");
-    naRef ldir = args[0];
-    ulDir* dir = ulOpenDir(naStr_data(args[0]));
-    if(!dir) return naNil();
+    
+    simgear::Dir d(SGPath(naStr_data(args[0])));
+    if(!d.exists()) return naNil();
     naRef result = naNewVector(c);
-    ulDirEnt* dent;
-    while((dent = ulReadDir(dir)))
-        naVec_append(result, naStr_fromdata(naNewString(c), dent->d_name,
-                                            strlen(dent->d_name)));
-    ulCloseDir(dir);
+
+    simgear::PathList paths = d.children(simgear::Dir::TYPE_FILE | simgear::Dir::TYPE_DIR);
+    for (unsigned int i=0; i<paths.size(); ++i) {
+      std::string p = paths[i].file();
+      naVec_append(result, naStr_fromdata(naNewString(c), p.c_str(), p.size()));
+    }
+    
     return result;
 }
 
@@ -722,18 +723,14 @@ void FGNasalSys::init()
     hashset(_globals, "__gcsave", _gcHash);
 
     // Now load the various source files in the Nasal directory
-    SGPath p(globals->get_fg_root());
-    p.append("Nasal");
-    ulDirEnt* dent;
-    ulDir* dir = ulOpenDir(p.c_str());
-    while(dir && (dent = ulReadDir(dir)) != 0) {
-        SGPath fullpath(p);
-        fullpath.append(dent->d_name);
-        SGPath file(dent->d_name);
-        if(file.extension() != "nas") continue;
-        loadModule(fullpath, file.base().c_str());
+    simgear::Dir nasalDir(SGPath(globals->get_fg_root(), "Nasal"));
+    simgear::PathList scripts = nasalDir.children(simgear::Dir::TYPE_FILE, ".nas");
+    
+    for (unsigned int i=0; i<scripts.size(); ++i) {
+      SGPath fullpath(scripts[i]);
+      SGPath file = fullpath.file();
+      loadModule(fullpath, file.base().c_str());
     }
-    ulCloseDir(dir);
 
     // set signal and remove node to avoid restoring at reinit
     const char *s = "nasal-dir-initialized";

From 987c1bdfda75029208fc84413c6e27d03835dd87 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Sun, 24 Oct 2010 11:04:14 +0100
Subject: [PATCH 35/45] Automake build fixes for PLIB net/ul removal.

---
 src/FDM/ExternalNet/ExternalNet.cxx | 2 ++
 src/FDM/fdm_shell.cxx               | 1 +
 src/Network/httpd.cxx               | 4 ++--
 src/Network/multiplay.cxx           | 3 +--
 utils/TerraSync/Makefile.am         | 2 +-
 5 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/FDM/ExternalNet/ExternalNet.cxx b/src/FDM/ExternalNet/ExternalNet.cxx
index 7a3a14156..9d2f3e7b2 100644
--- a/src/FDM/ExternalNet/ExternalNet.cxx
+++ b/src/FDM/ExternalNet/ExternalNet.cxx
@@ -24,6 +24,8 @@
 #  include <config.h>
 #endif
 
+#include <cstring>
+
 #include <simgear/debug/logstream.hxx>
 #include <simgear/io/lowlevel.hxx> // endian tests
 #include <simgear/io/sg_netBuffer.hxx>
diff --git a/src/FDM/fdm_shell.cxx b/src/FDM/fdm_shell.cxx
index a4cfad309..aaf94a6e7 100644
--- a/src/FDM/fdm_shell.cxx
+++ b/src/FDM/fdm_shell.cxx
@@ -24,6 +24,7 @@
 #  include <config.h>
 #endif
 
+#include <cassert>
 #include <simgear/structure/exception.hxx>
 
 #include <FDM/fdm_shell.hxx>
diff --git a/src/Network/httpd.cxx b/src/Network/httpd.cxx
index e2e6a918f..31d4b9337 100644
--- a/src/Network/httpd.cxx
+++ b/src/Network/httpd.cxx
@@ -32,8 +32,8 @@
 #include <simgear/compiler.h>
 
 #include <algorithm>		// sort()
-#include <stdlib.h>		// atoi() atof()
-
+#include <cstdlib>		// atoi() atof()
+#include <cstring>
 #include <string>
 
 #include <simgear/debug/logstream.hxx>
diff --git a/src/Network/multiplay.cxx b/src/Network/multiplay.cxx
index e7991e6b8..a9cd32bf3 100644
--- a/src/Network/multiplay.cxx
+++ b/src/Network/multiplay.cxx
@@ -28,8 +28,7 @@
 
 #include <simgear/compiler.h>
 
-#include <string>
-
+#include <cstring>
 #include <iostream>
 #include <map>
 #include <string>
diff --git a/utils/TerraSync/Makefile.am b/utils/TerraSync/Makefile.am
index 7106cc72f..3932be524 100644
--- a/utils/TerraSync/Makefile.am
+++ b/utils/TerraSync/Makefile.am
@@ -6,4 +6,4 @@ terrasync_SOURCES = terrasync.cxx
 
 AM_CPPFLAGS = $(svn_CPPFLAGS)
 
-terrasync_LDADD = -lsgio -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS)
+terrasync_LDADD = -lsgio -lsgstructure -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS)

From d7440d8fc529f6efaa03e65d886943543b0351cc Mon Sep 17 00:00:00 2001
From: Anders Gidenstam <anders@gidenstam.org>
Date: Sun, 24 Oct 2010 15:21:26 +0200
Subject: [PATCH 36/45] src/Network/jpg-httpd.cxx: Include C++ C headers
 instead of plain C headers.

---
 src/Network/jpg-httpd.cxx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/Network/jpg-httpd.cxx b/src/Network/jpg-httpd.cxx
index ba5e5e3c2..55e5e79c0 100644
--- a/src/Network/jpg-httpd.cxx
+++ b/src/Network/jpg-httpd.cxx
@@ -31,9 +31,9 @@
 
 #include <simgear/compiler.h>
 
-#include <stdlib.h>		// atoi() atof()
+#include <cstdlib>		// atoi() atof()
 
-#include <string>
+#include <cstring>
 
 #include <simgear/debug/logstream.hxx>
 #include <simgear/io/iochannel.hxx>

From d61e992d765f0b7c59c74e8cb0d6004d5f2e596d Mon Sep 17 00:00:00 2001
From: ThorstenB <brehmt@gmail.com>
Date: Sun, 24 Oct 2010 21:36:15 +0200
Subject: [PATCH 37/45] Fix occasional start-up crash when reading GUI XMLs.
 _dialog_props holds SGSharedPtrs (pointers managed by reference counters).
 Explicitly casting the object to an unmanaged SGPropertyNode* and deleting it
 may cause heap corruption, since the following assignment "_dialog_props[..]
 = ..." also tries to delete the (already deleted) object.

---
 src/GUI/new_gui.cxx | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/GUI/new_gui.cxx b/src/GUI/new_gui.cxx
index 034484e27..51bc82fc9 100644
--- a/src/GUI/new_gui.cxx
+++ b/src/GUI/new_gui.cxx
@@ -296,9 +296,6 @@ NewGUI::readDir (const char * path)
                 continue;
             }
             string name = nameprop->getStringValue();
-            if (_dialog_props[name])
-                delete (SGPropertyNode *)_dialog_props[name];
-
             _dialog_props[name] = props;
         }
     }

From 657cd883d714ff7a6ee4974f6bb82b0812d480cc Mon Sep 17 00:00:00 2001
From: Torsten Dreyer <Torsten@t3r.de>
Date: Mon, 25 Oct 2010 14:48:56 +0200
Subject: [PATCH 38/45] Compile again, replace clib strXXX with std::string

---
 src/Input/FGEventInput.cxx      | 10 +++++-----
 src/Input/FGLinuxEventInput.cxx |  4 +++-
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/Input/FGEventInput.cxx b/src/Input/FGEventInput.cxx
index 31e6fc978..29ee0977c 100644
--- a/src/Input/FGEventInput.cxx
+++ b/src/Input/FGEventInput.cxx
@@ -66,7 +66,7 @@ bool FGEventSetting::Test()
 
 static inline bool StartsWith( string & s, const char * cp )
 {
-  return s.compare( 0, strlen(cp), cp ) == 0;
+  return s.find( cp ) == 0;
 }
 
 FGInputEvent * FGInputEvent::NewObject( FGInputDevice * device, SGPropertyNode_ptr node )
@@ -223,8 +223,8 @@ FGInputDevice::~FGInputDevice()
     if( nasal ) {
       SGPropertyNode_ptr nasalClose = nasal->getNode("close");
       if (nasalClose) {
-        const char *s = nasalClose->getStringValue();
-        nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s, strlen(s), deviceNode );
+        const string s = nasalClose->getStringValue();
+        nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s.c_str(), s.length(), deviceNode );
       }
     }
     nas->deleteModule(nasalModule.c_str());
@@ -253,10 +253,10 @@ void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode )
   if (nasal) {
     SGPropertyNode_ptr open = nasal->getNode("open");
     if (open) {
-      const char *s = open->getStringValue();
+      const string s = open->getStringValue();
       FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal");
       if (nas)
-        nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s, strlen(s), deviceNode );
+        nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s.c_str(), s.length(), deviceNode );
     }
   }
 
diff --git a/src/Input/FGLinuxEventInput.cxx b/src/Input/FGLinuxEventInput.cxx
index 183c7b3ab..621e15fd8 100644
--- a/src/Input/FGLinuxEventInput.cxx
+++ b/src/Input/FGLinuxEventInput.cxx
@@ -29,6 +29,8 @@
 #include <poll.h>
 #include <linux/input.h>
 #include <dbus/dbus.h>
+#include <fcntl.h>
+
 
 struct TypeCode {
   unsigned type;
@@ -238,7 +240,7 @@ static EventNameByType EVENT_NAME_BY_TYPE;
 
 struct ltstr {
   bool operator()(const char * s1, const char * s2 ) const {
-    return strcmp( s1, s2 ) < 0;
+    return string(s1).compare( s2 ) < 0;
   }
 };
 

From 25b333c07d3aaee4b375e2d091601f05a963c5b9 Mon Sep 17 00:00:00 2001
From: Frederic Bouvier <fredfgfs01@free.fr>
Date: Mon, 25 Oct 2010 23:16:37 +0200
Subject: [PATCH 39/45] Document changes to effect files syntax: adding
 mipmap-control

---
 docs-mini/README.effects | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/docs-mini/README.effects b/docs-mini/README.effects
index c46d392c2..0e2814e7c 100644
--- a/docs-mini/README.effects
+++ b/docs-mini/README.effects
@@ -192,6 +192,15 @@ texture-unit - has several child properties:
 			wrap-s
 			wrap-t
 			wrap-r
+			mipmap-control - controls how the mipmap levels are computed.
+			Each color channel can be computed with different functions
+			among average, sum, product, min and max. For example :
+					<function-r>average</function-r>
+					<function-a>min</function-a>
+				function-r - function for red
+				function-g - function for green
+				function-b - function for blue
+				function-a - function for alpha
 		The following built-in types are supported:
 			white - 1 pixel white texture
 			noise - a 3d noise texture

From 68f54290481701429a04cd33c06be2674fc2b3a4 Mon Sep 17 00:00:00 2001
From: Erik Hofman <erik@ehofman.com>
Date: Tue, 26 Oct 2010 09:48:56 +0200
Subject: [PATCH 40/45] Sync with JSBSim cvs + Anders' patch to get it working
 with FlightGear.

---
 src/FDM/JSBSim/FGFDMExec.cpp                  |  69 ++++---
 src/FDM/JSBSim/FGFDMExec.h                    |  52 ++---
 src/FDM/JSBSim/FGState.cpp                    | 178 ------------------
 src/FDM/JSBSim/FGState.h                      | 166 ----------------
 src/FDM/JSBSim/JSBSim.cxx                     |  22 ++-
 src/FDM/JSBSim/JSBSim.hxx                     |   6 +-
 src/FDM/JSBSim/Makefile.am                    |   4 +-
 .../initialization/FGInitialCondition.cpp     |  46 +++--
 .../JSBSim/input_output/FGGroundCallback.cpp  |   3 +-
 .../JSBSim/input_output/FGGroundCallback.h    |   7 +-
 src/FDM/JSBSim/input_output/FGXMLElement.cpp  |   9 +-
 src/FDM/JSBSim/input_output/FGXMLParse.cpp    |   4 +-
 src/FDM/JSBSim/input_output/FGfdmSocket.h     |   4 +-
 src/FDM/JSBSim/math/FGLocation.cpp            |  12 +-
 src/FDM/JSBSim/math/FGQuaternion.h            |  17 +-
 src/FDM/JSBSim/math/FGTable.cpp               |  80 ++++++--
 src/FDM/JSBSim/models/FGAerodynamics.cpp      |  11 +-
 src/FDM/JSBSim/models/FGAuxiliary.cpp         |   9 +-
 src/FDM/JSBSim/models/FGFCS.cpp               |   4 +-
 src/FDM/JSBSim/models/FGFCS.h                 |   9 +-
 src/FDM/JSBSim/models/FGInertial.cpp          |   5 +-
 src/FDM/JSBSim/models/FGLGear.cpp             |  14 +-
 src/FDM/JSBSim/models/FGLGear.h               |   5 +-
 src/FDM/JSBSim/models/FGModel.h               |   4 +-
 src/FDM/JSBSim/models/FGOutput.cpp            |  53 +++---
 src/FDM/JSBSim/models/FGOutput.h              |  20 +-
 src/FDM/JSBSim/models/FGPropagate.cpp         |  59 +++++-
 src/FDM/JSBSim/models/FGPropagate.h           |  35 ++--
 src/FDM/JSBSim/models/FGPropulsion.cpp        |  53 +++---
 src/FDM/JSBSim/models/propulsion/FGEngine.cpp |   8 +-
 .../JSBSim/models/propulsion/FGPropeller.cpp  |  28 +--
 31 files changed, 407 insertions(+), 589 deletions(-)
 delete mode 100644 src/FDM/JSBSim/FGState.cpp
 delete mode 100644 src/FDM/JSBSim/FGState.h

diff --git a/src/FDM/JSBSim/FGFDMExec.cpp b/src/FDM/JSBSim/FGFDMExec.cpp
index 4cba2d0f9..bc81cd6f8 100644
--- a/src/FDM/JSBSim/FGFDMExec.cpp
+++ b/src/FDM/JSBSim/FGFDMExec.cpp
@@ -71,16 +71,9 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGFDMExec.cpp,v 1.80 2010/08/21 22:56:10 jberndt Exp $";
+static const char *IdSrc = "$Id: FGFDMExec.cpp,v 1.82 2010/10/07 03:17:29 jberndt Exp $";
 static const char *IdHdr = ID_FDMEXEC;
 
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-GLOBAL DECLARATIONS
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-unsigned int FGFDMExec::FDMctr = 0;
-FGPropertyManager* FGFDMExec::master=0;
-
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -102,11 +95,21 @@ void checkTied ( FGPropertyManager *node )
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-// Constructor
-
+// Constructors
 FGFDMExec::FGFDMExec(FGPropertyManager* root) : Root(root)
 {
+  FDMctr = new unsigned int;
+  *FDMctr = 0;
+  Initialize();
+}
 
+FGFDMExec::FGFDMExec(FGPropertyManager* root, unsigned int* fdmctr) : Root(root), FDMctr(fdmctr)
+{
+  Initialize();
+}
+
+void FGFDMExec::Initialize()
+{
   Frame           = 0;
   Error           = 0;
   GroundCallback  = 0;
@@ -138,22 +141,26 @@ FGFDMExec::FGFDMExec(FGPropertyManager* root) : Root(root)
   dT = 1.0/120.0; // a default timestep size. This is needed for when JSBSim is
                   // run in standalone mode with no initialization file.
 
-  IdFDM = FDMctr; // The main (parent) JSBSim instance is always the "zeroth"
-  FDMctr++;       // instance. "child" instances are loaded last.
-
   try {
     char* num = getenv("JSBSIM_DEBUG");
     if (num) debug_lvl = atoi(num); // set debug level
-  } catch (...) {               // if error set to 1
+  } catch (...) {                   // if error set to 1
     debug_lvl = 1;
   }
 
-  if (Root == 0) {
-    if (master == 0)
-      master = new FGPropertyManager;
-    Root = master;
+  if (Root == 0) {                 // Then this is the root FDM
+    Root = new FGPropertyManager;  // Create the property manager
+    
+    FDMctr = new unsigned int;     // Create and initialize the child FDM counter
+    (*FDMctr) = 0;
   }
 
+  // Store this FDM's ID
+  IdFDM = (*FDMctr); // The main (parent) JSBSim instance is always the "zeroth"
+                                                                      
+  // Prepare FDMctr for the next child FDM id
+  (*FDMctr)++;       // instance. "child" instances are loaded last.
+
   instance = Root->GetNode("/fdm/jsbsim",IdFDM,true);
   Debug(0);
   // this is to catch errors in binding member functions to the property tree.
@@ -186,7 +193,17 @@ FGFDMExec::~FGFDMExec()
   try {
     checkTied( instance );
     DeAllocate();
-    if (Root == 0)  delete master;
+    
+    if (IdFDM == 0) { // Meaning this is no child FDM
+      if(Root != 0) {
+         delete Root;
+         Root = 0;
+      }
+      if(FDMctr != 0) {
+         delete FDMctr;
+         FDMctr = 0;
+      }
+    }
   } catch ( string msg ) {
     cout << "Caught error: " << msg << endl;
   }
@@ -439,7 +456,7 @@ vector <string> FGFDMExec::EnumerateFDMs(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-bool FGFDMExec::LoadScript(string script, double deltaT)
+bool FGFDMExec::LoadScript(const string& script, double deltaT)
 {
   bool result;
 
@@ -451,8 +468,8 @@ bool FGFDMExec::LoadScript(string script, double deltaT)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-bool FGFDMExec::LoadModel(string AircraftPath, string EnginePath, string SystemsPath,
-                string model, bool addModelToPath)
+bool FGFDMExec::LoadModel(const string& AircraftPath, const string& EnginePath, const string& SystemsPath,
+                const string& model, bool addModelToPath)
 {
   FGFDMExec::AircraftPath = RootDir + AircraftPath;
   FGFDMExec::EnginePath = RootDir + EnginePath;
@@ -463,7 +480,7 @@ bool FGFDMExec::LoadModel(string AircraftPath, string EnginePath, string Systems
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-bool FGFDMExec::LoadModel(string model, bool addModelToPath)
+bool FGFDMExec::LoadModel(const string& model, bool addModelToPath)
 {
   string token;
   string aircraftCfgFileName;
@@ -730,7 +747,7 @@ void FGFDMExec::BuildPropertyCatalog(struct PropertyCatalogStructure* pcs)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-string FGFDMExec::QueryPropertyCatalog(string in)
+string FGFDMExec::QueryPropertyCatalog(const string& in)
 {
   string results="";
   for (unsigned i=0; i<PropertyCatalog.size(); i++) {
@@ -852,7 +869,7 @@ bool FGFDMExec::ReadChild(Element* el)
 
   struct childData* child = new childData;
 
-  child->exec = new FGFDMExec();
+  child->exec = new FGFDMExec(Root, FDMctr);
   child->exec->SetChild(true);
 
   string childAircraft = el->GetAttributeValue("name");
@@ -922,7 +939,7 @@ void FGFDMExec::EnableOutput(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-bool FGFDMExec::SetOutputDirectives(string fname)
+bool FGFDMExec::SetOutputDirectives(const string& fname)
 {
   bool result;
 
diff --git a/src/FDM/JSBSim/FGFDMExec.h b/src/FDM/JSBSim/FGFDMExec.h
index 8c91cb2c9..231cadcaa 100644
--- a/src/FDM/JSBSim/FGFDMExec.h
+++ b/src/FDM/JSBSim/FGFDMExec.h
@@ -60,7 +60,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_FDMEXEC "$Id: FGFDMExec.h,v 1.52 2010/07/04 13:50:21 jberndt Exp $"
+#define ID_FDMEXEC "$Id: FGFDMExec.h,v 1.54 2010/10/07 03:17:29 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -169,7 +169,7 @@ CLASS DOCUMENTATION
                                 property actually maps toa function call of DoTrim().
 
     @author Jon S. Berndt
-    @version $Revision: 1.52 $
+    @version $Revision: 1.54 $
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -206,8 +206,9 @@ class FGFDMExec : public FGJSBBase, public FGXMLFileRead
 
 public:
 
-  /// Default constructor
+  /// Default constructors
   FGFDMExec(FGPropertyManager* root = 0);
+  FGFDMExec(FGPropertyManager* root, unsigned int* fdmctr);
 
   /// Default destructor
   ~FGFDMExec();
@@ -252,8 +253,8 @@ public:
       @param addModelToPath set to true to add the model name to the
       AircraftPath, defaults to true
       @return true if successful */
-  bool LoadModel(string AircraftPath, string EnginePath, string SystemsPath,
-                 string model, bool addModelToPath = true);
+  bool LoadModel(const string& AircraftPath, const string& EnginePath, const string& SystemsPath,
+                 const string& model, bool addModelToPath = true);
 
   /** Loads an aircraft model.  The paths to the aircraft and engine
       config file directories must be set prior to calling this.  See
@@ -265,28 +266,28 @@ public:
       @param addModelToPath set to true to add the model name to the
       AircraftPath, defaults to true
       @return true if successful*/
-  bool LoadModel(string model, bool addModelToPath = true);
+  bool LoadModel(const string& model, bool addModelToPath = true);
 
   /** Loads a script
       @param Script the full path name and file name for the script to be loaded.
       @return true if successfully loadsd; false otherwise. */
-  bool LoadScript(string Script, double deltaT);
+  bool LoadScript(const string& Script, double deltaT);
 
   /** Sets the path to the engine config file directories.
       @param path path to the directory under which engine config
       files are kept, for instance "engine"  */
-  bool SetEnginePath(string path)   { EnginePath = RootDir + path; return true; }
+  bool SetEnginePath(const string& path)   { EnginePath = RootDir + path; return true; }
 
   /** Sets the path to the aircraft config file directories.
       @param path path to the aircraft directory. For instance:
       "aircraft". Under aircraft, then, would be directories for various
       modeled aircraft such as C172/, x15/, etc.  */
-  bool SetAircraftPath(string path) { AircraftPath = RootDir + path; return true; }
+  bool SetAircraftPath(const string& path) { AircraftPath = RootDir + path; return true; }
   
   /** Sets the path to the systems config file directories.
       @param path path to the directory under which systems config
       files are kept, for instance "systems"  */
-  bool SetSystemsPath(string path)   { SystemsPath = RootDir + path; return true; }
+  bool SetSystemsPath(const string& path)   { SystemsPath = RootDir + path; return true; }
   
   /// @name Top-level executive State and Model retrieval mechanism
   //@{
@@ -327,28 +328,28 @@ public:
   //@}
 
   /// Retrieves the engine path.
-  inline string GetEnginePath(void)          {return EnginePath;}
+  inline const string& GetEnginePath(void)    {return EnginePath;}
   /// Retrieves the aircraft path.
-  inline string GetAircraftPath(void)        {return AircraftPath;}
+  inline const string& GetAircraftPath(void)  {return AircraftPath;}
   /// Retrieves the systems path.
-  inline string GetSystemsPath(void)         {return SystemsPath;}
+  inline const string& GetSystemsPath(void)   {return SystemsPath;}
   /// Retrieves the full aircraft path name.
-  inline string GetFullAircraftPath(void)    {return FullAircraftPath;}
+  inline const string& GetFullAircraftPath(void) {return FullAircraftPath;}
 
   /** Retrieves the value of a property.
       @param property the name of the property
       @result the value of the specified property */
-  inline double GetPropertyValue(string property) {return instance->GetDouble(property);}
+  inline double GetPropertyValue(const string& property) {return instance->GetDouble(property);}
 
   /** Sets a property value.
       @param property the property to be set
       @param value the value to set the property to */
-  inline void SetPropertyValue(string property, double value) {
+  inline void SetPropertyValue(const string& property, double value) {
     instance->SetDouble(property, value);
   }
 
   /// Returns the model name.
-  string GetModelName(void) { return modelName; }
+  const string& GetModelName(void) { return modelName; }
 /*
   /// Returns the current time.
   double GetSimTime(void);
@@ -382,12 +383,12 @@ public:
       be logged.
       @param fname the filename of an output directives file.
     */
-  bool SetOutputDirectives(string fname);
+  bool SetOutputDirectives(const string& fname);
 
   /** Sets (or overrides) the output filename
       @param fname the name of the file to output data to
       @return true if successful, false if there is no output specified for the flight model */
-  bool SetOutputFileName(string fname) {
+  bool SetOutputFileName(const string& fname) {
     if (Outputs.size() > 0) Outputs[0]->SetOutputFileName(fname);
     else return false;
     return true;
@@ -447,7 +448,7 @@ public:
   *   @param check The string to search for in the property catalog.
   *   @return the carriage-return-delimited string containing all matching strings
   *               in the catalog.  */
-  string QueryPropertyCatalog(string check);
+  string QueryPropertyCatalog(const string& check);
 
   // Print the contents of the property catalog for the loaded aircraft.
   void PrintPropertyCatalog(void);
@@ -495,11 +496,11 @@ public:
 
   /** Sets the root directory where JSBSim starts looking for its system directories.
       @param rootDir the string containing the root directory. */
-  void SetRootDir(string rootDir) {RootDir = rootDir;}
+  void SetRootDir(const string& rootDir) {RootDir = rootDir;}
 
   /** Retrieves teh Root Directory.
       @return the string representing the root (base) JSBSim directory. */
-  string GetRootDir(void) const {return RootDir;}
+  const string& GetRootDir(void) const {return RootDir;}
 
   /** Increments the simulation time.
       @return the new simulation time.     */
@@ -512,7 +513,6 @@ public:
   int GetDebugLevel(void) const {return debug_lvl;};
 
 private:
-  static unsigned int FDMctr;
   int Error;
   unsigned int Frame;
   unsigned int IdFDM;
@@ -536,8 +536,6 @@ private:
   bool trim_status;
   int ta_mode;
 
-  static FGPropertyManager *master;
-
   FGGroundCallback*   GroundCallback;
   FGAtmosphere*       Atmosphere;
   FGFCS*              FCS;
@@ -558,12 +556,16 @@ private:
 
   FGPropertyManager* Root;
   FGPropertyManager* instance;
+  
+  // The FDM counter is used to give each child FDM an unique ID. The root FDM has the ID 0
+  unsigned int*      FDMctr;
 
   vector <string> PropertyCatalog;
   vector <FGOutput*> Outputs;
   vector <childData*> ChildFDMList;
   vector <FGModel*> Models;
 
+  void Initialize();
   bool ReadFileHeader(Element*);
   bool ReadChild(Element*);
   bool ReadPrologue(Element*);
diff --git a/src/FDM/JSBSim/FGState.cpp b/src/FDM/JSBSim/FGState.cpp
deleted file mode 100644
index 08e38a690..000000000
--- a/src/FDM/JSBSim/FGState.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Module:       FGState.cpp
- Author:       Jon Berndt
- Date started: 11/17/98
- Called by:    FGFDMExec and accessed by all models.
-
- ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
-
- This program is free software; you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the Free Software
- Foundation; either version 2 of the License, or (at your option) any later
- version.
-
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
- details.
-
- You should have received a copy of the GNU Lesser General Public License along with
- this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- Place - Suite 330, Boston, MA  02111-1307, USA.
-
- Further information about the GNU Lesser General Public License can also be found on
- the world wide web at http://www.gnu.org.
-
-FUNCTIONAL DESCRIPTION
---------------------------------------------------------------------------------
-See header file.
-
-HISTORY
---------------------------------------------------------------------------------
-11/17/98   JSB   Created
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-INCLUDES
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#include <cmath>
-#include <iostream>
-
-#include "FGState.h"
-
-using namespace std;
-
-namespace JSBSim {
-
-static const char *IdSrc = "$Id: FGState.cpp,v 1.15 2009/10/24 22:59:30 jberndt Exp $";
-static const char *IdHdr = ID_STATE;
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-MACROS
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-CLASS IMPLEMENTATION
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-FGState::FGState(FGFDMExec* fdex)
-{
-  FDMExec = fdex;
-
-  sim_time = 0.0;
-  dt = 1.0/120.0; // a default timestep size. This is needed for when JSBSim is
-                  // run in standalone mode with no initialization file.
-
-  Aircraft     = FDMExec->GetAircraft();
-  Propagate    = FDMExec->GetPropagate();
-  Auxiliary    = FDMExec->GetAuxiliary();
-  FCS          = FDMExec->GetFCS();
-  Atmosphere   = FDMExec->GetAtmosphere();
-  Aerodynamics = FDMExec->GetAerodynamics();
-  GroundReactions = FDMExec->GetGroundReactions();
-  Propulsion      = FDMExec->GetPropulsion();
-  PropertyManager = FDMExec->GetPropertyManager();
-
-  bind();
-
-  Debug(0);
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGState::~FGState()
-{
-  Debug(1);
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGState::Initialize(FGInitialCondition *FGIC)
-{
-  sim_time = 0.0;
-
-  Propagate->SetInitialState( FGIC );
-
-  Atmosphere->Run();
-  Atmosphere->SetWindNED( FGIC->GetWindNFpsIC(),
-                          FGIC->GetWindEFpsIC(),
-                          FGIC->GetWindDFpsIC() );
-
-  FGColumnVector3 vAeroUVW;
-  vAeroUVW = Propagate->GetUVW() + Propagate->GetTl2b()*Atmosphere->GetTotalWindNED();
-
-  double alpha, beta;
-  if (vAeroUVW(eW) != 0.0)
-    alpha = vAeroUVW(eU)*vAeroUVW(eU) > 0.0 ? atan2(vAeroUVW(eW), vAeroUVW(eU)) : 0.0;
-  else
-    alpha = 0.0;
-  if (vAeroUVW(eV) != 0.0)
-    beta = vAeroUVW(eU)*vAeroUVW(eU)+vAeroUVW(eW)*vAeroUVW(eW) > 0.0 ? atan2(vAeroUVW(eV), (fabs(vAeroUVW(eU))/vAeroUVW(eU))*sqrt(vAeroUVW(eU)*vAeroUVW(eU) + vAeroUVW(eW)*vAeroUVW(eW))) : 0.0;
-  else
-    beta = 0.0;
-
-  Auxiliary->SetAB(alpha, beta);
-
-  double Vt = vAeroUVW.Magnitude();
-  Auxiliary->SetVt(Vt);
-
-  Auxiliary->SetMach(Vt/Atmosphere->GetSoundSpeed());
-
-  double qbar = 0.5*Vt*Vt*Atmosphere->GetDensity();
-  Auxiliary->Setqbar(qbar);
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGState::bind(void)
-{
-  PropertyManager->Tie("sim-time-sec", this, &FGState::Getsim_time);
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-//    The bitmasked value choices are as follows:
-//    unset: In this case (the default) JSBSim would only print
-//       out the normally expected messages, essentially echoing
-//       the config files as they are read. If the environment
-//       variable is not set, debug_lvl is set to 1 internally
-//    0: This requests JSBSim not to output any messages
-//       whatsoever.
-//    1: This value explicity requests the normal JSBSim
-//       startup messages
-//    2: This value asks for a message to be printed out when
-//       a class is instantiated
-//    4: When this value is set, a message is displayed when a
-//       FGModel object executes its Run() method
-//    8: When this value is set, various runtime state variables
-//       are printed out periodically
-//    16: When set various parameters are sanity checked and
-//       a message is printed out when they go out of bounds
-
-void FGState::Debug(int from)
-{
-  if (debug_lvl <= 0) return;
-
-  if (debug_lvl & 1) { // Standard console startup message output
-    if (from == 0) { // Constructor
-
-    }
-  }
-  if (debug_lvl & 2 ) { // Instantiation/Destruction notification
-    if (from == 0) cout << "Instantiated: FGState" << endl;
-    if (from == 1) cout << "Destroyed:    FGState" << endl;
-  }
-  if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
-  }
-  if (debug_lvl & 8 ) { // Runtime state variables
-  }
-  if (debug_lvl & 16) { // Sanity checking
-  }
-  if (debug_lvl & 64) {
-    if (from == 0) { // Constructor
-      cout << IdSrc << endl;
-      cout << IdHdr << endl;
-    }
-  }
-}
-}
diff --git a/src/FDM/JSBSim/FGState.h b/src/FDM/JSBSim/FGState.h
deleted file mode 100644
index 220f042fd..000000000
--- a/src/FDM/JSBSim/FGState.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Header:       FGState.h
- Author:       Jon S. Berndt
- Date started: 11/17/98
-
- ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
-
- This program is free software; you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the Free Software
- Foundation; either version 2 of the License, or (at your option) any later
- version.
-
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
- details.
-
- You should have received a copy of the GNU Lesser General Public License along with
- this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- Place - Suite 330, Boston, MA  02111-1307, USA.
-
- Further information about the GNU Lesser General Public License can also be found on
- the world wide web at http://www.gnu.org.
-
-FUNCTIONAL DESCRIPTION
---------------------------------------------------------------------------------
-
-HISTORY
---------------------------------------------------------------------------------
-11/17/98   JSB   Created
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-SENTRY
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#ifndef FGSTATE_H
-#define FGSTATE_H
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-INCLUDES
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#include <fstream>
-#include <string>
-#include <map>
-#include "FGJSBBase.h"
-#include "initialization/FGInitialCondition.h"
-#include "math/FGColumnVector3.h"
-#include "math/FGQuaternion.h"
-#include "FGFDMExec.h"
-#include "models/FGAtmosphere.h"
-#include "models/FGFCS.h"
-#include "models/FGPropagate.h"
-#include "models/FGAuxiliary.h"
-#include "models/FGAerodynamics.h"
-#include "models/FGAircraft.h"
-#include "models/FGGroundReactions.h"
-#include "models/FGPropulsion.h"
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-DEFINITIONS
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#define ID_STATE "$Id: FGState.h,v 1.15 2009/10/02 10:30:07 jberndt Exp $"
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FORWARD DECLARATIONS
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-namespace JSBSim {
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-CLASS DOCUMENTATION
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-/** Encapsulates the calculation of aircraft state.
-    <h3>Properties</h3>
-    @property sim-time-sec (read only) cumulative simulation in seconds.
-    @author Jon S. Berndt
-    @version $Revision: 1.15 $
-*/
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-CLASS DECLARATION
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-class FGState : public FGJSBBase
-{
-public:
-  /** Constructor
-      @param Executive a pointer to the parent executive object */
-  FGState(FGFDMExec*);
-  /// Destructor
-  ~FGState();
-
-  /** Initializes the simulation state based on parameters from an Initial Conditions object.
-      @param FGIC pointer to an initial conditions object.
-      @see FGInitialConditions.    */
-  void Initialize(FGInitialCondition *FGIC);
-
-  /// Returns the cumulative simulation time in seconds.
-  inline double Getsim_time(void) const { return sim_time; }
-
-  /// Returns the simulation delta T.
-  inline double Getdt(void) {return dt;}
-
-  /// Suspends the simulation and sets the delta T to zero.
-  inline void SuspendIntegration(void) {saved_dt = dt; dt = 0.0;}
-
-  /// Resumes the simulation by resetting delta T to the correct value.
-  inline void ResumeIntegration(void)  {dt = saved_dt;}
-
-  /** Returns the simulation suspension state.
-      @return true if suspended, false if executing  */
-  bool IntegrationSuspended(void) {return dt == 0.0;}
-
-  /** Sets the current sim time.
-      @param cur_time the current time
-      @return the current simulation time.      */
-  inline double Setsim_time(double cur_time) {
-    sim_time = cur_time;
-    return sim_time;
-  }
-
-  /** Sets the integration time step for the simulation executive.
-      @param delta_t the time step in seconds.     */
-  inline void  Setdt(double delta_t) { dt = delta_t; }
-
-  /** Increments the simulation time.
-      @return the new simulation time.     */
-  inline double IncrTime(void) {
-    sim_time+=dt;
-    return sim_time;
-  }
-
-  /** Prints a summary of simulator state (speed, altitude,
-      configuration, etc.)  */
-//  void ReportState(void);
-
-private:
-  double sim_time, dt;
-  double saved_dt;
-
-  FGFDMExec* FDMExec;
-
-  FGAircraft* Aircraft;
-  FGPropagate* Propagate;
-  FGAtmosphere* Atmosphere;
-  FGFCS* FCS;
-  FGAerodynamics* Aerodynamics;
-  FGGroundReactions* GroundReactions;
-  FGPropulsion* Propulsion;
-  FGAuxiliary* Auxiliary;
-  FGPropertyManager* PropertyManager;
-
-  void bind();
-
-  void Debug(int from);
-};
-}
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-#endif
-
diff --git a/src/FDM/JSBSim/JSBSim.cxx b/src/FDM/JSBSim/JSBSim.cxx
index a915539cc..612424629 100644
--- a/src/FDM/JSBSim/JSBSim.cxx
+++ b/src/FDM/JSBSim/JSBSim.cxx
@@ -18,7 +18,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 //
-// $Id: JSBSim.cxx,v 1.62 2010/07/14 05:50:40 ehofman Exp $
+// $Id: JSBSim.cxx,v 1.63 2010/10/07 03:45:40 jberndt Exp $
 
 
 #ifdef HAVE_CONFIG_H
@@ -97,14 +97,15 @@ public:
 
   /** Compute the altitude above ground. */
   virtual double GetAGLevel(double t, const FGLocation& l,
-                            FGLocation& cont,
-                            FGColumnVector3& n, FGColumnVector3& v) const {
+                            FGLocation& cont, FGColumnVector3& n,
+                            FGColumnVector3& v, FGColumnVector3& w) const {
     double loc_cart[3] = { l(eX), l(eY), l(eZ) };
-    double contact[3], normal[3], vel[3], agl = 0;
+    double contact[3], normal[3], vel[3], angularVel[3], agl = 0;
     mInterface->get_agl_ft(t, loc_cart, SG_METER_TO_FEET*2, contact, normal,
-                           vel, &agl);
+                           vel, angularVel, &agl);
     n = FGColumnVector3( normal[0], normal[1], normal[2] );
     v = FGColumnVector3( vel[0], vel[1], vel[2] );
+    w = FGColumnVector3( angularVel[0], angularVel[1], angularVel[2] );
     cont = FGColumnVector3( contact[0], contact[1], contact[2] );
     return agl;
   }
@@ -489,7 +490,7 @@ void FGJSBsim::update( double dt )
       if ( startup_trim->getBoolValue() ) {
         double contact[3], d[3], agl;
         get_agl_ft(fdmex->GetSimTime(), cart_pos, SG_METER_TO_FEET*2, contact,
-                   d, d, &agl);
+                   d, d, d, &agl);
         double terrain_alt = sqrt(contact[0]*contact[0] + contact[1]*contact[1]
              + contact[2]*contact[2]) - fgic->GetSeaLevelRadiusFtIC();
 
@@ -743,7 +744,7 @@ bool FGJSBsim::copy_from_JSBsim()
       double loc_cart[3] = { l(FGJSBBase::eX), l(FGJSBBase::eY), l(FGJSBBase::eZ) };
       double contact[3], d[3], sd, t;
       is_valid_m(&t, d, &sd);
-      get_agl_ft(t, loc_cart, SG_METER_TO_FEET*2, contact, d, d, &sd);
+      get_agl_ft(t, loc_cart, SG_METER_TO_FEET*2, contact, d, d, d, &sd);
       double rwrad
         = FGColumnVector3( contact[0], contact[1], contact[2] ).Magnitude();
       _set_Runway_altitude( rwrad - get_Sea_level_radius() );
@@ -1204,9 +1205,8 @@ void FGJSBsim::update_ic(void)
 bool
 FGJSBsim::get_agl_ft(double t, const double pt[3], double alt_off,
                      double contact[3], double normal[3], double vel[3],
-                     double *agl)
+                     double angularVel[3], double *agl)
 {
-   double angularVel[3];
    const SGMaterial* material;
    simgear::BVHNode::Id id;
    if (!FGInterface::get_agl_ft(t, pt, alt_off, contact, normal, vel,
@@ -1289,10 +1289,12 @@ void FGJSBsim::update_external_forces(double t_off)
     double contact[3];
     double ground_normal[3];
     double ground_vel[3];
+    double ground_angular_vel[3];
     double root_agl_ft;
 
     if (!got_wire) {
-        bool got = get_agl_ft(t_off, hook_area[1], 0, contact, ground_normal, ground_vel, &root_agl_ft);
+        bool got = get_agl_ft(t_off, hook_area[1], 0, contact, ground_normal,
+                              ground_vel, ground_angular_vel, &root_agl_ft);
         if (got && root_agl_ft > 0 && root_agl_ft < hook_length) {
             FGColumnVector3 ground_normal_body = Tl2b * (Tec2l * FGColumnVector3(ground_normal[0], ground_normal[1], ground_normal[2]));
             FGColumnVector3 contact_body = Tl2b * Location.LocationToLocal(FGColumnVector3(contact[0], contact[1], contact[2]));
diff --git a/src/FDM/JSBSim/JSBSim.hxx b/src/FDM/JSBSim/JSBSim.hxx
index 38c952bd2..6729a141f 100644
--- a/src/FDM/JSBSim/JSBSim.hxx
+++ b/src/FDM/JSBSim/JSBSim.hxx
@@ -58,7 +58,6 @@ FORWARD DECLARATIONS
 #include <FDM/JSBSim/FGFDMExec.h>
 
 namespace JSBSim {
-class FGState;
 class FGAtmosphere;
 class FGFCS;
 class FGPropulsion;
@@ -86,7 +85,7 @@ CLASS DOCUMENTATION
     documentation for main for direction on running JSBSim apart from FlightGear.
     @author Curtis L. Olson (original)
     @author Tony Peden (Maintained and refined)
-    @version $Id: JSBSim.hxx,v 1.13 2010/07/07 20:46:36 andgi Exp $
+    @version $Id: JSBSim.hxx,v 1.15 2010/10/07 03:45:40 jberndt Exp $
     @see main in file JSBSim.cpp (use main() wrapper for standalone usage)
 */
 
@@ -208,13 +207,12 @@ public:
 
     bool get_agl_ft(double t, const double pt[3], double alt_off,
                     double contact[3], double normal[3], double vel[3],
-                    double *agl);
+                    double angularVel[3], double *agl);
 private:
     JSBSim::FGFDMExec *fdmex;
     JSBSim::FGInitialCondition *fgic;
     bool needTrim;
 
-    JSBSim::FGState*        State;
     JSBSim::FGAtmosphere*   Atmosphere;
     JSBSim::FGFCS*          FCS;
     JSBSim::FGPropulsion*   Propulsion;
diff --git a/src/FDM/JSBSim/Makefile.am b/src/FDM/JSBSim/Makefile.am
index c2d2b93c7..2d3b6414a 100644
--- a/src/FDM/JSBSim/Makefile.am
+++ b/src/FDM/JSBSim/Makefile.am
@@ -2,8 +2,8 @@ SUBDIRS = initialization models input_output math
 
 noinst_LIBRARIES = libJSBSim.a
 
-libJSBSim_a_SOURCES =  FGFDMExec.cpp FGJSBBase.cpp FGState.cpp JSBSim.cxx
+libJSBSim_a_SOURCES =  FGFDMExec.cpp FGJSBBase.cpp JSBSim.cxx
 
-noinst_HEADERS = FGFDMExec.h FGJSBBase.h FGState.h JSBSim.hxx
+noinst_HEADERS = FGFDMExec.h FGJSBBase.h JSBSim.hxx
 
 INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/FDM/JSBSim
diff --git a/src/FDM/JSBSim/initialization/FGInitialCondition.cpp b/src/FDM/JSBSim/initialization/FGInitialCondition.cpp
index ed17c6944..d8452c77b 100644
--- a/src/FDM/JSBSim/initialization/FGInitialCondition.cpp
+++ b/src/FDM/JSBSim/initialization/FGInitialCondition.cpp
@@ -62,7 +62,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGInitialCondition.cpp,v 1.44 2010/09/18 22:48:12 jberndt Exp $";
+static const char *IdSrc = "$Id: FGInitialCondition.cpp,v 1.46 2010/09/29 02:19:05 jberndt Exp $";
 static const char *IdHdr = ID_INITIALCONDITION;
 
 //******************************************************************************
@@ -120,7 +120,7 @@ void FGInitialCondition::ResetIC(double u0, double v0, double w0,
   FGQuaternion Quat( phi, theta, psi );
   Quat.Normalize();
 
-  const FGMatrix33& _Tl2b  = Quat.GetT();     // local to body frame
+//  const FGMatrix33& _Tl2b  = Quat.GetT();     // local to body frame
   const FGMatrix33& _Tb2l  = Quat.GetTInv();  // body to local
 
   FGColumnVector3 _vUVW_BODY(u,v,w);
@@ -863,17 +863,22 @@ bool FGInitialCondition::Load(string rstfile, bool useStoredPath)
   }
 
   double version = document->GetAttributeValueAsNumber("version");
+  bool result = false;
+
   if (version == HUGE_VAL) {
-    return Load_v1(); // Default to the old version
+    result = Load_v1(); // Default to the old version
   } else if (version >= 3.0) {
     cerr << "Only initialization file formats 1 and 2 are currently supported" << endl;
     exit (-1);
   } else if (version >= 2.0) {
-    return Load_v2();
+    result = Load_v2();
   } else if (version >= 1.0) {
-    return Load_v1();
+    result = Load_v1();
   } 
 
+  fdmex->GetPropagate()->DumpState();
+
+  return result;
 }
 
 //******************************************************************************
@@ -962,6 +967,7 @@ bool FGInitialCondition::Load_v1(void)
 bool FGInitialCondition::Load_v2(void)
 {
   int n;
+  double epa = 0.0;
   FGColumnVector3 vLoc, vOrient;
   bool result = true;
   FGInertial* Inertial = fdmex->GetInertial();
@@ -969,10 +975,10 @@ bool FGInitialCondition::Load_v2(void)
   FGColumnVector3 vOmegaEarth = FGColumnVector3(0.0, 0.0, Inertial->omega());
 
   if (document->FindElement("earth_position_angle")) {
-    double epa = document->FindElementValueAsNumberConvertTo("earth_position_angle", "RAD");
+    epa = document->FindElementValueAsNumberConvertTo("earth_position_angle", "RAD");
+  }
     Inertial->SetEarthPositionAngle(epa);
     Propagate->GetVState()->vLocation.SetEarthPositionAngle(epa);
-  }
 
   Propagate->SetSeaLevelRadius(GetSeaLevelRadiusFtIC());
 
@@ -989,15 +995,15 @@ bool FGInitialCondition::Load_v2(void)
 
   Element* position = document->FindElement("position");
   if (position) {
-    vLoc = position->FindElementTripletConvertTo("FT");
     string frame = position->GetAttributeValue("frame");
     frame = to_lower(frame);
     if (frame == "eci") { // Need to transform vLoc to ECEF for storage and use in FGLocation.
+      vLoc = position->FindElementTripletConvertTo("FT");
       vLoc = Propagate->GetTi2ec()*vLoc;
       Propagate->SetLocation(vLoc);
     } else if (frame == "ecef") {
       double AltitudeASL = 0.0;
-      if (vLoc.Magnitude() == 0.0) {
+      if (!position->FindElement("x") && !position->FindElement("y") && !position->FindElement("z")) {
         if (position->FindElement("radius")) {
           AltitudeASL = position->FindElementValueAsNumberConvertTo("radius", "FT") - sea_level_radius;
         } else if (position->FindElement("altitudeAGL")) {
@@ -1008,11 +1014,15 @@ bool FGInitialCondition::Load_v2(void)
           cerr << endl << "  No altitude or radius initial condition is given." << endl;
           result = false;
         }
-        Propagate->SetPosition(
-                         position->FindElementValueAsNumberConvertTo("longitude", "RAD"),
-                         position->FindElementValueAsNumberConvertTo("latitude", "RAD"),
-                         AltitudeASL + GetSeaLevelRadiusFtIC());
+        double lat_rad=0.0;
+        double long_rad = 0.0;
+        if (position->FindElement("longitude"))
+            long_rad = position->FindElementValueAsNumberConvertTo("longitude", "RAD");
+        if (position->FindElement("latitude"))
+            lat_rad = position->FindElementValueAsNumberConvertTo("latitude", "RAD");
+        Propagate->SetPosition(long_rad, lat_rad, AltitudeASL + GetSeaLevelRadiusFtIC());
       } else {
+        vLoc = position->FindElementTripletConvertTo("FT");
         Propagate->SetLocation(vLoc);
       }
     } else {
@@ -1072,7 +1082,9 @@ bool FGInitialCondition::Load_v2(void)
       // Q_b/i = Q_e/i * Q_b/e
 
       FGQuaternion QuatEC2Body(vOrient); // Store relationship of Body frame wrt ECEF frame, Q_b/e
+      QuatEC2Body.Normalize();
       FGQuaternion QuatI2EC = Propagate->GetTi2ec(); // Get Q_e/i from matrix
+      QuatI2EC.Normalize();
       QuatI2Body = QuatI2EC * QuatEC2Body; // Q_b/i = Q_e/i * Q_b/e 
 
     } else if (frame == "local") {
@@ -1089,8 +1101,11 @@ bool FGInitialCondition::Load_v2(void)
       // Q_b/i = Q_e/i * Q_n/e * Q_b/n
 
       FGQuaternion QuatLocal2Body = FGQuaternion(vOrient); // Store relationship of Body frame wrt local (NED) frame, Q_b/n
+      QuatLocal2Body.Normalize();
       FGQuaternion QuatEC2Local = Propagate->GetTec2l();   // Get Q_n/e from matrix
+      QuatEC2Local.Normalize();
       FGQuaternion QuatI2EC = Propagate->GetTi2ec(); // Get Q_e/i from matrix
+      QuatI2EC.Normalize();
       QuatI2Body = QuatI2EC * QuatEC2Local * QuatLocal2Body; // Q_b/i = Q_e/i * Q_n/e * Q_b/n
 
     } else {
@@ -1102,6 +1117,7 @@ bool FGInitialCondition::Load_v2(void)
     }
   }
 
+  QuatI2Body.Normalize();
   Propagate->SetInertialOrientation(QuatI2Body);
 
   // Initialize vehicle velocity
@@ -1201,7 +1217,9 @@ bool FGInitialCondition::Load_v2(void)
     running_elements = document->FindNextElement("running");
   }
 
-  // fdmex->RunIC();
+  fdmex->SuspendIntegration(); // saves the integration rate, dt, then sets it to 0.0.
+  fdmex->Run();
+  fdmex->ResumeIntegration(); // Restores the integration rate to what it was.
 
   return result;
 }
diff --git a/src/FDM/JSBSim/input_output/FGGroundCallback.cpp b/src/FDM/JSBSim/input_output/FGGroundCallback.cpp
index bf1cfb1b5..8933101ca 100644
--- a/src/FDM/JSBSim/input_output/FGGroundCallback.cpp
+++ b/src/FDM/JSBSim/input_output/FGGroundCallback.cpp
@@ -68,9 +68,10 @@ double FGGroundCallback::GetAltitude(const FGLocation& loc) const
 
 double FGGroundCallback::GetAGLevel(double t, const FGLocation& loc,
                                     FGLocation& contact, FGColumnVector3& normal,
-                                    FGColumnVector3& vel) const
+                                    FGColumnVector3& vel, FGColumnVector3& angularVel) const
 {
   vel = FGColumnVector3(0.0, 0.0, 0.0);
+  angularVel = FGColumnVector3(0.0, 0.0, 0.0);
   normal = FGColumnVector3(loc).Normalize();
   double loc_radius = loc.GetRadius();  // Get the radius of the given location
                                         // (e.g. the CG)
diff --git a/src/FDM/JSBSim/input_output/FGGroundCallback.h b/src/FDM/JSBSim/input_output/FGGroundCallback.h
index 63955a4d0..bb6780915 100644
--- a/src/FDM/JSBSim/input_output/FGGroundCallback.h
+++ b/src/FDM/JSBSim/input_output/FGGroundCallback.h
@@ -45,7 +45,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_GROUNDCALLBACK "$Id: FGGroundCallback.h,v 1.8 2009/10/02 10:30:09 jberndt Exp $"
+#define ID_GROUNDCALLBACK "$Id: FGGroundCallback.h,v 1.9 2010/10/07 03:45:40 jberndt Exp $"
 
 namespace JSBSim {
 
@@ -59,7 +59,7 @@ CLASS DOCUMENTATION
     ball formed earth.
 
     @author Mathias Froehlich
-    @version $Id: FGGroundCallback.h,v 1.8 2009/10/02 10:30:09 jberndt Exp $
+    @version $Id: FGGroundCallback.h,v 1.9 2010/10/07 03:45:40 jberndt Exp $
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -85,7 +85,8 @@ public:
   virtual double GetAltitude(const FGLocation& l) const;
   /** Compute the altitude above ground. Defaults to sealevel altitude. */
   virtual double GetAGLevel(double t, const FGLocation& l, FGLocation& cont,
-                            FGColumnVector3& n, FGColumnVector3& v) const;
+                            FGColumnVector3& n, FGColumnVector3& v,
+                            FGColumnVector3& w) const;
   virtual void SetTerrainGeoCentRadius(double radius) {mReferenceRadius = radius;}
   virtual double GetTerrainGeoCentRadius(void) const {return mReferenceRadius;}
 private:
diff --git a/src/FDM/JSBSim/input_output/FGXMLElement.cpp b/src/FDM/JSBSim/input_output/FGXMLElement.cpp
index 3f7becc5c..832b2c8c6 100755
--- a/src/FDM/JSBSim/input_output/FGXMLElement.cpp
+++ b/src/FDM/JSBSim/input_output/FGXMLElement.cpp
@@ -42,7 +42,7 @@ FORWARD DECLARATIONS
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGXMLElement.cpp,v 1.30 2010/09/04 14:15:15 jberndt Exp $";
+static const char *IdSrc = "$Id: FGXMLElement.cpp,v 1.31 2010/09/29 02:22:03 jberndt Exp $";
 static const char *IdHdr = ID_XMLELEMENT;
 
 bool Element::converterIsInitialized = false;
@@ -93,10 +93,10 @@ Element::Element(const string& nm)
     convert["SLUG*FT2"]["KG*M2"] = 1.35594;
     convert["KG*M2"]["SLUG*FT2"] = 1.0/convert["SLUG*FT2"]["KG*M2"];
     // Angles
-    convert["RAD"]["DEG"] = 360.0/(2.0*3.1415926);
+    convert["RAD"]["DEG"] = 180.0/M_PI;
     convert["DEG"]["RAD"] = 1.0/convert["RAD"]["DEG"];
     // Angular rates
-    convert["RAD/SEC"]["DEG/SEC"] = 360.0/(2.0*3.1415926);
+    convert["RAD/SEC"]["DEG/SEC"] = convert["RAD"]["DEG"];
     convert["DEG/SEC"]["RAD/SEC"] = 1.0/convert["RAD/SEC"]["DEG/SEC"];
     // Spring force
     convert["LBS/FT"]["N/M"] = 14.5939;
@@ -478,7 +478,6 @@ FGColumnVector3 Element::FindElementTripletConvertTo( const string& target_units
     if (!supplied_units.empty()) value *= convert[supplied_units][target_units];
   } else {
     value = 0.0;
-    cerr << "Could not find an X triplet item for this column vector." << endl;
   }
   triplet(1) = value;
 
@@ -489,7 +488,6 @@ FGColumnVector3 Element::FindElementTripletConvertTo( const string& target_units
     if (!supplied_units.empty()) value *= convert[supplied_units][target_units];
   } else {
     value = 0.0;
-    cerr << "Could not find a Y triplet item for this column vector." << endl;
   }
   triplet(2) = value;
 
@@ -500,7 +498,6 @@ FGColumnVector3 Element::FindElementTripletConvertTo( const string& target_units
     if (!supplied_units.empty()) value *= convert[supplied_units][target_units];
   } else {
     value = 0.0;
-    cerr << "Could not find a Z triplet item for this column vector." << endl;
   }
   triplet(3) = value;
 
diff --git a/src/FDM/JSBSim/input_output/FGXMLParse.cpp b/src/FDM/JSBSim/input_output/FGXMLParse.cpp
index 90fe0e7b9..22d30a255 100755
--- a/src/FDM/JSBSim/input_output/FGXMLParse.cpp
+++ b/src/FDM/JSBSim/input_output/FGXMLParse.cpp
@@ -40,7 +40,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGXMLParse.cpp,v 1.10 2009/10/24 22:59:30 jberndt Exp $";
+static const char *IdSrc = "$Id: FGXMLParse.cpp,v 1.11 2010/09/28 02:54:03 jberndt Exp $";
 static const char *IdHdr = ID_XMLPARSE;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -122,7 +122,7 @@ void FGXMLParse::endElement (const char * name)
 {
   if (!working_string.empty()) {
     vector <string> work_strings = split(working_string, '\n');
-    for (int i=0; i<work_strings.size(); i++) current_element->AddData(work_strings[i]);
+    for (unsigned int i=0; i<work_strings.size(); i++) current_element->AddData(work_strings[i]);
   }
 
   current_element = current_element->GetParent();
diff --git a/src/FDM/JSBSim/input_output/FGfdmSocket.h b/src/FDM/JSBSim/input_output/FGfdmSocket.h
index 4c9e34b3c..7090c6fc2 100644
--- a/src/FDM/JSBSim/input_output/FGfdmSocket.h
+++ b/src/FDM/JSBSim/input_output/FGfdmSocket.h
@@ -65,7 +65,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_FDMSOCKET "$Id: FGfdmSocket.h,v 1.19 2010/05/13 03:07:59 jberndt Exp $"
+#define ID_FDMSOCKET "$Id: FGfdmSocket.h,v 1.20 2010/10/15 11:30:28 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -107,7 +107,7 @@ public:
   void Close(void);
   bool GetConnectStatus(void) {return connected;}
 
-  enum {ptUDP, ptTCP};
+  enum ProtocolType {ptUDP, ptTCP} ;
 
 private:
   int sckt;
diff --git a/src/FDM/JSBSim/math/FGLocation.cpp b/src/FDM/JSBSim/math/FGLocation.cpp
index 9e0a62a23..fcba3289e 100644
--- a/src/FDM/JSBSim/math/FGLocation.cpp
+++ b/src/FDM/JSBSim/math/FGLocation.cpp
@@ -45,7 +45,7 @@ INCLUDES
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGLocation.cpp,v 1.22 2010/09/18 22:47:17 jberndt Exp $";
+static const char *IdSrc = "$Id: FGLocation.cpp,v 1.23 2010/09/22 11:34:09 jberndt Exp $";
 static const char *IdHdr = ID_LOCATION;
 using std::cerr;
 using std::endl;
@@ -319,7 +319,7 @@ void FGLocation::ComputeDerivedUnconditional(void) const
 
   if (a != 0.0 && b != 0.0) {
     double c, p, q, s, t, u, v, w, z, p2, u2, r0;
-    double Ne, P, Q0, Q, signz0, sqrt_q; 
+    double Ne, P, Q0, Q, signz0, sqrt_q, z_term; 
     p  = fabs(mECLoc(eZ))/eps2;
     s  = r02/(e2*eps2);
     p2 = p*p;
@@ -328,8 +328,7 @@ void FGLocation::ComputeDerivedUnconditional(void) const
     if (q>0)
     {
       u  = p/sqrt_q;
-//      u2 = p2/q;
-      u2 = u*u;
+      u2 = p2/q;
       v  = b2*u2/q;
       P  = 27.0*v*s/q;
       Q0 = sqrt(P+1) + sqrt(P);
@@ -338,10 +337,11 @@ void FGLocation::ComputeDerivedUnconditional(void) const
       c  = sqrt(u2 - 1 + 2.0*t);
       w  = (c - u)/2.0;
       signz0 = mECLoc(eZ)>=0?1.0:-1.0;
-      if ((sqrt(t*t+v)-u*w-0.5*t-0.25) < 0.0) {
+      z_term = sqrt(t*t+v)-u*w-0.5*t-0.25;
+      if (z_term < 0.0) {
         z = 0.0;
       } else {
-        z  = signz0*sqrt_q*(w+sqrt(sqrt(t*t+v)-u*w-0.5*t-0.25));
+        z  = signz0*sqrt_q*(w+sqrt(z_term));
       }
       Ne = a*sqrt(1+eps2*z*z/b2);
       mGeodLat = asin((eps2+1.0)*(z/Ne));
diff --git a/src/FDM/JSBSim/math/FGQuaternion.h b/src/FDM/JSBSim/math/FGQuaternion.h
index 104a52f39..69f304eb3 100644
--- a/src/FDM/JSBSim/math/FGQuaternion.h
+++ b/src/FDM/JSBSim/math/FGQuaternion.h
@@ -47,7 +47,7 @@ SENTRY
   DEFINITIONS
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_QUATERNION "$Id: FGQuaternion.h,v 1.17 2010/06/30 03:13:40 jberndt Exp $"
+#define ID_QUATERNION "$Id: FGQuaternion.h,v 1.18 2010/09/29 02:19:05 jberndt Exp $"
 
 namespace JSBSim {
 
@@ -177,7 +177,7 @@ public:
   const FGMatrix33& GetTInv(void) const { ComputeDerived(); return mTInv; }
 
   /** Retrieves the Euler angles.
-      @return a reference to the triad of euler angles corresponding
+      @return a reference to the triad of Euler angles corresponding
       to this quaternion rotation.
       units radians  */
   const FGColumnVector3& GetEuler(void) const {
@@ -186,7 +186,7 @@ public:
   }
 
   /** Retrieves the Euler angles.
-      @param i the euler angle index.
+      @param i the Euler angle index.
       units radians.
       @return a reference to the i-th euler angles corresponding
       to this quaternion rotation.
@@ -197,7 +197,7 @@ public:
   }
 
   /** Retrieves the Euler angles.
-      @param i the euler angle index.
+      @param i the Euler angle index.
       @return a reference to the i-th euler angles corresponding
       to this quaternion rotation.
       units degrees */
@@ -206,6 +206,15 @@ public:
     return radtodeg*mEulerAngles(i);
   }
 
+  /** Retrieves the Euler angle vector.
+      @return an Euler angle column vector corresponding
+      to this quaternion rotation.
+      units degrees */
+  FGColumnVector3 const GetEulerDeg(void) const {
+    ComputeDerived();
+    return radtodeg*mEulerAngles;
+  }
+
   /** Retrieves sine of the given euler angle.
       @return the sine of the Euler angle theta (pitch attitude) corresponding
       to this quaternion rotation.  */
diff --git a/src/FDM/JSBSim/math/FGTable.cpp b/src/FDM/JSBSim/math/FGTable.cpp
index 3f23fd144..0780739c9 100644
--- a/src/FDM/JSBSim/math/FGTable.cpp
+++ b/src/FDM/JSBSim/math/FGTable.cpp
@@ -47,7 +47,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGTable.cpp,v 1.23 2010/09/16 11:01:24 jberndt Exp $";
+static const char *IdSrc = "$Id: FGTable.cpp,v 1.27 2010/10/21 11:09:56 jberndt Exp $";
 static const char *IdHdr = ID_TABLE;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -143,13 +143,12 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop
       internal = true;
     } else {
       // internal table is a child element of a restricted type
-      cerr << endl << fgred << "  An internal table cannot be nested within another type," << endl;
-      cerr << "  such as a function. The 'internal' keyword is ignored." << fgdef << endl << endl;
+      throw("  An internal table cannot be nested within another type,"
+            " such as a function. The 'internal' keyword is ignored.");
     }
   } else if (!call_type.empty()) {
-    cerr << endl << fgred << "  An unknown table type attribute is listed: " << call_type
-                 << ". Execution cannot continue." << fgdef << endl << endl;
-    abort();
+    throw("  An unknown table type attribute is listed: "  
+          ". Execution cannot continue.");
   }
 
   // Determine and store the lookup properties for this table unless this table
@@ -218,8 +217,7 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop
     brkpt_string = el->GetAttributeValue("breakPoint");
     if (brkpt_string.empty()) {
      // no independentVars found, and table is not marked as internal, nor is it a 3D table
-      cerr << endl << fgred << "No independent variable found for table."  << fgdef << endl << endl;
-      abort();
+      throw("No independent variable found for table.");
     }
   }
   // end lookup property code
@@ -249,10 +247,11 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop
   case 2:
     nRows = tableData->GetNumDataLines()-1;
 
-    if (nRows >= 2) nCols = FindNumColumns(tableData->GetDataLine(0));
-    else {
-      cerr << endl << fgred << "Not enough rows in this table." << fgdef << endl;
-      abort();
+    if (nRows >= 2) {
+      nCols = FindNumColumns(tableData->GetDataLine(0));
+      if (nCols < 2) throw(string("Not enough columns in table data."));
+    } else {
+      throw(string("Not enough rows in the table data."));
     }
 
     Type = tt2D;
@@ -290,6 +289,63 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop
     break;
   }
 
+  // Sanity checks: lookup indices must be increasing monotonically
+  unsigned int r,c,b;
+
+  // find next xml element containing a name attribute
+  // to indicate where the error occured
+  Element* nameel = el;
+  while (nameel != 0 && nameel->GetAttributeValue("name") == "")
+    nameel=nameel->GetParent();
+
+  // check breakpoints, if applicable
+  if (dimension > 2) {
+    for (b=2; b<=nTables; ++b) {
+      if (Data[b][1] <= Data[b-1][1]) {
+        stringstream errormsg;
+        errormsg << fgred << highint << endl
+             << "  FGTable: breakpoint lookup is not monotonically increasing" << endl
+             << "  in breakpoint " << b;
+        if (nameel != 0) errormsg << " of table in " << nameel->GetAttributeValue("name");
+        errormsg << ":" << reset << endl
+                 << "  " << Data[b][1] << "<=" << Data[b-1][1] << endl;
+        throw(errormsg.str());
+      }
+    }
+  }
+
+  // check columns, if applicable
+  if (dimension > 1) {
+    for (c=2; c<=nCols; ++c) {
+      if (Data[0][c] <= Data[0][c-1]) {
+        stringstream errormsg;
+        errormsg << fgred << highint << endl
+             << "  FGTable: column lookup is not monotonically increasing" << endl
+             << "  in column " << c;
+        if (nameel != 0) errormsg << " of table in " << nameel->GetAttributeValue("name");
+        errormsg << ":" << reset << endl
+                 << "  " << Data[0][c] << "<=" << Data[0][c-1] << endl;
+        throw(errormsg.str());
+      }
+    }
+  }
+
+  // check rows
+  if (dimension < 3) { // in 3D tables, check only rows of subtables
+    for (r=2; r<=nRows; ++r) {
+      if (Data[r][0]<=Data[r-1][0]) {
+        stringstream errormsg;
+        errormsg << fgred << highint << endl
+             << "  FGTable: row lookup is not monotonically increasing" << endl
+             << "  in row " << r;
+        if (nameel != 0) errormsg << " of table in " << nameel->GetAttributeValue("name");
+        errormsg << ":" << reset << endl
+                 << "  " << Data[r][0] << "<=" << Data[r-1][0] << endl;
+        throw(errormsg.str());
+      }
+    }
+  }
+
   bind();
 
   if (debug_lvl & 1) Print();
diff --git a/src/FDM/JSBSim/models/FGAerodynamics.cpp b/src/FDM/JSBSim/models/FGAerodynamics.cpp
index 7f5359e98..0a384447d 100644
--- a/src/FDM/JSBSim/models/FGAerodynamics.cpp
+++ b/src/FDM/JSBSim/models/FGAerodynamics.cpp
@@ -52,7 +52,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGAerodynamics.cpp,v 1.32 2010/09/07 00:40:03 jberndt Exp $";
+static const char *IdSrc = "$Id: FGAerodynamics.cpp,v 1.34 2010/10/15 11:32:41 jberndt Exp $";
 static const char *IdHdr = ID_AERODYNAMICS;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -349,7 +349,14 @@ bool FGAerodynamics::Load(Element *element)
     axis = axis_element->GetAttributeValue("name");
     function_element = axis_element->FindElement("function");
     while (function_element) {
-      ca.push_back( new FGFunction(PropertyManager, function_element) );
+      string current_func_name = function_element->GetAttributeValue("name");
+      try {
+        ca.push_back( new FGFunction(PropertyManager, function_element) );
+      } catch (string const str) {
+        cerr << endl << fgred << "Error loading aerodynamic function in " 
+             << current_func_name << ":" << str << " Aborting." << reset << endl;
+        return false;
+      }
       function_element = axis_element->FindNextElement("function");
     }
     Coeff[AxisIdx[axis]] = ca;
diff --git a/src/FDM/JSBSim/models/FGAuxiliary.cpp b/src/FDM/JSBSim/models/FGAuxiliary.cpp
index ededdc1cc..630a9712a 100755
--- a/src/FDM/JSBSim/models/FGAuxiliary.cpp
+++ b/src/FDM/JSBSim/models/FGAuxiliary.cpp
@@ -59,7 +59,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGAuxiliary.cpp,v 1.42 2010/07/27 23:18:19 jberndt Exp $";
+static const char *IdSrc = "$Id: FGAuxiliary.cpp,v 1.44 2010/10/10 15:10:15 jberndt Exp $";
 static const char *IdHdr = ID_AUXILIARY;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -173,7 +173,7 @@ bool FGAuxiliary::Run()
   vAeroUVW = vUVW - wind;
 
   Vt = vAeroUVW.Magnitude();
-  if ( Vt > 0.05) {
+  if ( Vt > 1.0 ) {
     if (vAeroUVW(eW) != 0.0)
       alpha = vAeroUVW(eU)*vAeroUVW(eU) > 0.0 ? atan2(vAeroUVW(eW), vAeroUVW(eU)) : 0.0;
     if (vAeroUVW(eV) != 0.0)
@@ -182,10 +182,9 @@ bool FGAuxiliary::Run()
 
     double mUW = (vAeroUVW(eU)*vAeroUVW(eU) + vAeroUVW(eW)*vAeroUVW(eW));
     double signU=1;
-    if (vAeroUVW(eU) != 0.0)
-      signU = vAeroUVW(eU)/fabs(vAeroUVW(eU));
+    if (vAeroUVW(eU) < 0.0) signU=-1;
 
-    if ( (mUW == 0.0) || (Vt == 0.0) ) {
+    if ( mUW < 1.0 ) {
       adot = 0.0;
       bdot = 0.0;
     } else {
diff --git a/src/FDM/JSBSim/models/FGFCS.cpp b/src/FDM/JSBSim/models/FGFCS.cpp
index 368fa90ae..3de0c7135 100644
--- a/src/FDM/JSBSim/models/FGFCS.cpp
+++ b/src/FDM/JSBSim/models/FGFCS.cpp
@@ -63,7 +63,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGFCS.cpp,v 1.70 2010/08/21 22:56:11 jberndt Exp $";
+static const char *IdSrc = "$Id: FGFCS.cpp,v 1.71 2010/09/28 02:54:03 jberndt Exp $";
 static const char *IdHdr = ID_FCS;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -187,7 +187,7 @@ bool FGFCS::InitModel(void)
 
 void FGFCS::LateBind(void)
 {
-  int i;
+  unsigned int i;
 
   for (i=0; i<Systems.size(); i++) Systems[i]->LateBind();
   for (i=0; i<APComponents.size(); i++) APComponents[i]->LateBind();
diff --git a/src/FDM/JSBSim/models/FGFCS.h b/src/FDM/JSBSim/models/FGFCS.h
index a2b592768..1a57835f9 100644
--- a/src/FDM/JSBSim/models/FGFCS.h
+++ b/src/FDM/JSBSim/models/FGFCS.h
@@ -51,7 +51,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_FCS "$Id: FGFCS.h,v 1.30 2010/09/05 17:31:40 jberndt Exp $"
+#define ID_FCS "$Id: FGFCS.h,v 1.31 2010/09/22 11:33:40 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -168,7 +168,7 @@ CLASS DOCUMENTATION
     @property gear/tailhook-pos-norm
 
     @author Jon S. Berndt
-    @version $Revision: 1.30 $
+    @version $Revision: 1.31 $
     @see FGActuator
     @see FGDeadBand
     @see FGFCSFunction
@@ -345,11 +345,6 @@ public:
   bool GetPropFeather(int engine) const { return PropFeather[engine]; }
   //@}
 
-  /** Retrieves the State object pointer.
-      This is used by the FGFCS-owned components.
-      @return pointer to the State object */
-  FGState* GetState(void) { return State; }
-
   /** Retrieves all component names for inclusion in output stream
       @param delimiter either a tab or comma string depending on output type
       @return a string containing the descriptive names for all components */
diff --git a/src/FDM/JSBSim/models/FGInertial.cpp b/src/FDM/JSBSim/models/FGInertial.cpp
index ab2670eb9..0779c6954 100644
--- a/src/FDM/JSBSim/models/FGInertial.cpp
+++ b/src/FDM/JSBSim/models/FGInertial.cpp
@@ -45,7 +45,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGInertial.cpp,v 1.18 2010/03/28 05:57:00 jberndt Exp $";
+static const char *IdSrc = "$Id: FGInertial.cpp,v 1.19 2010/10/10 15:06:38 jberndt Exp $";
 static const char *IdHdr = ID_INERTIAL;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -148,7 +148,8 @@ FGColumnVector3 FGInertial::GetGravityJ2(FGColumnVector3 position) const
   double lat = Propagate->GetLatitude();
   double sinLat = sin(lat);
 
-  double preCommon = 1.5*J2*(a/r)*(a/r);
+  double adivr = a/r;
+  double preCommon = 1.5*J2*adivr*adivr;
   double xy = 1.0 - 5.0*(sinLat*sinLat);
   double z = 3.0 - 5.0*(sinLat*sinLat);
   double GMOverr2 = GM/(r*r);
diff --git a/src/FDM/JSBSim/models/FGLGear.cpp b/src/FDM/JSBSim/models/FGLGear.cpp
index 569b76ee4..4106f5ab0 100644
--- a/src/FDM/JSBSim/models/FGLGear.cpp
+++ b/src/FDM/JSBSim/models/FGLGear.cpp
@@ -48,6 +48,7 @@ INCLUDES
 #include "FGMassBalance.h"
 #include "math/FGTable.h"
 #include <cstdlib>
+#include <cstring>
 
 using namespace std;
 
@@ -61,7 +62,7 @@ DEFINITIONS
 GLOBAL DATA
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-static const char *IdSrc = "$Id: FGLGear.cpp,v 1.76 2010/07/30 11:50:01 jberndt Exp $";
+static const char *IdSrc = "$Id: FGLGear.cpp,v 1.78 2010/10/07 03:45:40 jberndt Exp $";
 static const char *IdHdr = ID_LGEAR;
 
 // Body To Structural (body frame is rotated 180 deg about Y and lengths are given in
@@ -76,7 +77,8 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) :
   FGForce(fdmex),
   GearNumber(number),
   SteerAngle(0.0),
-  Castered(false)
+  Castered(false),
+  StaticFriction(false)
 {
   Element *force_table=0;
   Element *dampCoeff=0;
@@ -254,9 +256,7 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) :
   Curvature = 1.03;
 
   // Initialize Lagrange multipliers
-  LMultiplier[ftRoll].value = 0.;
-  LMultiplier[ftSide].value = 0.;
-  LMultiplier[ftRoll].value = 0.;
+  memset(LMultiplier, 0, sizeof(LMultiplier));
 
   Debug(0);
 }
@@ -281,13 +281,15 @@ FGColumnVector3& FGLGear::GetBodyForces(void)
   if (isRetractable) ComputeRetractionState();
 
   if (GearDown) {
+    FGColumnVector3 angularVel;
+
     vWhlBodyVec = MassBalance->StructuralToBody(vXYZn); // Get wheel in body frame
     vLocalGear = Propagate->GetTb2l() * vWhlBodyVec; // Get local frame wheel location
 
     gearLoc = Propagate->GetLocation().LocalToLocation(vLocalGear);
     // Compute the height of the theoretical location of the wheel (if strut is
     // not compressed) with respect to the ground level
-    double height = fdmex->GetGroundCallback()->GetAGLevel(t, gearLoc, contact, normal, cvel);
+    double height = fdmex->GetGroundCallback()->GetAGLevel(t, gearLoc, contact, normal, cvel, angularVel);
     vGroundNormal = Propagate->GetTec2b() * normal;
 
     // The height returned above is the AGL and is expressed in the Z direction
diff --git a/src/FDM/JSBSim/models/FGLGear.h b/src/FDM/JSBSim/models/FGLGear.h
index 2190f8b9c..f1828f8cf 100644
--- a/src/FDM/JSBSim/models/FGLGear.h
+++ b/src/FDM/JSBSim/models/FGLGear.h
@@ -47,7 +47,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_LGEAR "$Id: FGLGear.h,v 1.40 2010/07/30 11:50:01 jberndt Exp $"
+#define ID_LGEAR "$Id: FGLGear.h,v 1.41 2010/09/22 11:33:40 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -58,7 +58,6 @@ namespace JSBSim {
 class FGAircraft;
 class FGPropagate;
 class FGFCS;
-class FGState;
 class FGMassBalance;
 class FGAuxiliary;
 class FGTable;
@@ -181,7 +180,7 @@ CLASS DOCUMENTATION
         </contact>
 @endcode
     @author Jon S. Berndt
-    @version $Id: FGLGear.h,v 1.40 2010/07/30 11:50:01 jberndt Exp $
+    @version $Id: FGLGear.h,v 1.41 2010/09/22 11:33:40 jberndt Exp $
     @see Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
      NASA-Ames", NASA CR-2497, January 1975
     @see Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
diff --git a/src/FDM/JSBSim/models/FGModel.h b/src/FDM/JSBSim/models/FGModel.h
index d107d28a5..775ea9f29 100644
--- a/src/FDM/JSBSim/models/FGModel.h
+++ b/src/FDM/JSBSim/models/FGModel.h
@@ -48,7 +48,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_MODEL "$Id: FGModel.h,v 1.15 2010/09/07 00:19:46 jberndt Exp $"
+#define ID_MODEL "$Id: FGModel.h,v 1.16 2010/09/22 11:33:40 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -57,7 +57,6 @@ FORWARD DECLARATIONS
 namespace JSBSim {
 
 class FGFDMExec;
-class FGState;
 class FGAtmosphere;
 class FGFCS;
 class FGPropulsion;
@@ -119,7 +118,6 @@ protected:
   virtual void Debug(int from);
 
   FGFDMExec*         FDMExec;
-  FGState*           State;
   FGAtmosphere*      Atmosphere;
   FGFCS*             FCS;
   FGPropulsion*      Propulsion;
diff --git a/src/FDM/JSBSim/models/FGOutput.cpp b/src/FDM/JSBSim/models/FGOutput.cpp
index a974915f4..c074d9813 100644
--- a/src/FDM/JSBSim/models/FGOutput.cpp
+++ b/src/FDM/JSBSim/models/FGOutput.cpp
@@ -61,9 +61,6 @@ INCLUDES
 #include <cstring>
 #include <cstdlib>
 
-#include "input_output/net_fdm.hxx"
-#include "input_output/FGfdmSocket.h"
-
 #if defined(WIN32) && !defined(__CYGWIN__)
 #  include <windows.h>
 #else
@@ -77,7 +74,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGOutput.cpp,v 1.48 2010/04/12 12:25:19 jberndt Exp $";
+static const char *IdSrc = "$Id: FGOutput.cpp,v 1.49 2010/10/15 11:30:29 jberndt Exp $";
 static const char *IdHdr = ID_OUTPUT;
 
 // (stolen from FGFS native_fdm.cxx)
@@ -132,7 +129,6 @@ FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex)
   Name = "FGOutput";
   sFirstPass = dFirstPass = true;
   socket = 0;
-  flightGearSocket = 0;
   runID_postfix = 0;
   Type = otNone;
   SubSystems = 0;
@@ -153,7 +149,6 @@ FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex)
 FGOutput::~FGOutput()
 {
   delete socket;
-  delete flightGearSocket;
   OutputProperties.clear();
   Debug(1);
 }
@@ -231,6 +226,15 @@ void FGOutput::SetType(const string& type)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+void FGOutput::SetProtocol(const string& protocol)
+{
+  if (protocol == "UDP") Protocol = FGfdmSocket::ptUDP;
+  else if (protocol == "TCP") Protocol = FGfdmSocket::ptTCP;
+  else Protocol = FGfdmSocket::ptTCP; // Default to TCP
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 void FGOutput::DelimitedOutput(const string& fname)
 {
   streambuf* buffer;
@@ -566,7 +570,6 @@ void FGOutput::SocketDataFill(FGNetFDM* net)
        }
     }
 
-
     // Consumables
     net->num_tanks = Propulsion->GetNumTanks();   // Max number of fuel tanks
 
@@ -574,7 +577,6 @@ void FGOutput::SocketDataFill(FGNetFDM* net)
        net->fuel_quantity[i] = (float)(((FGTank *)Propulsion->GetTank(i))->GetContents());
     }
 
-
     // Gear status
     net->num_wheels  = GroundReactions->GetNumGearUnits();
 
@@ -588,13 +590,11 @@ void FGOutput::SocketDataFill(FGNetFDM* net)
        net->gear_compression[i] = (float)(GroundReactions->GetGearUnit(i)->GetCompLen());
     }
 
-
     // Environment
-    net->cur_time    = (long int)1234567890;	// Friday, Feb 13, 2009, 23:31:30 UTC (not processed by FGFS anyway)
+    net->cur_time    = (long int)1234567890;    // Friday, Feb 13, 2009, 23:31:30 UTC (not processed by FGFS anyway)
     net->warp        = 0;                       // offset in seconds to unix time
     net->visibility  = 25000.0;                 // visibility in meters (for env. effects)
 
-
     // Control surface positions (normalized values)
     net->elevator          = (float)(FCS->GetDePos(ofNorm));    // Norm Elevator Pos, --
     net->elevator_trim_tab = (float)(FCS->GetPitchTrimCmd());   // Norm Elev Trim Tab Pos, --
@@ -607,7 +607,6 @@ void FGOutput::SocketDataFill(FGNetFDM* net)
     net->speedbrake        = (float)(FCS->GetDsbPos(ofNorm));   // Norm Speedbrake Pos, --
     net->spoilers          = (float)(FCS->GetDspPos(ofNorm));   // Norm Spoiler Pos, --
 
-
     // Convert the net buffer to network format
     if ( isLittleEndian ) {
         net->version = htonl(net->version);
@@ -691,12 +690,11 @@ void FGOutput::FlightGearSocketOutput(void)
 {
   int length = sizeof(fgSockBuf);
 
-
-  if (flightGearSocket == NULL) return;
-  if (!flightGearSocket->GetConnectStatus()) return;
+  if (socket == NULL) return;
+  if (!socket->GetConnectStatus()) return;
 
   SocketDataFill(&fgSockBuf);
-  flightGearSocket->Send((char *)&fgSockBuf, length);
+  socket->Send((char *)&fgSockBuf, length);
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -944,11 +942,9 @@ void FGOutput::SocketStatusOutput(const string& out_str)
 
 bool FGOutput::Load(Element* element)
 {
-  string type="", parameter="";
+  string parameter="";
   string name="";
-  string protocol="tcp";
   int OutRate = 0;
-  string property;
   unsigned int port;
   Element *property_element;
 
@@ -967,19 +963,12 @@ bool FGOutput::Load(Element* element)
   if (!document) return false;
 
   name = FDMExec->GetRootDir() + document->GetAttributeValue("name");
-  type = document->GetAttributeValue("type");
-  SetType(type);
-  if (!document->GetAttributeValue("port").empty() && type == string("SOCKET")) {
-    port = atoi(document->GetAttributeValue("port").c_str());
-    socket = new FGfdmSocket(name, port);
-  } else if (!document->GetAttributeValue("port").empty() && type == string("FLIGHTGEAR")) {
-    port = atoi(document->GetAttributeValue("port").c_str());
-    if (!document->GetAttributeValue("protocol").empty())
-       protocol = document->GetAttributeValue("protocol");
-    if (protocol == "udp")
-       flightGearSocket = new FGfdmSocket(name, port, FGfdmSocket::ptUDP);  // create udp socket
-    else
-       flightGearSocket = new FGfdmSocket(name, port, FGfdmSocket::ptTCP);  // create tcp socket (default)
+  SetType(document->GetAttributeValue("type"));
+  Port = document->GetAttributeValue("port");
+  if (!Port.empty() && (Type == otSocket || Type == otFlightGear)) {
+    port = atoi(Port.c_str());
+    SetProtocol(document->GetAttributeValue("protocol"));
+    socket = new FGfdmSocket(name, port, Protocol);
   } else {
     BaseFilename = Filename = name;
   }
diff --git a/src/FDM/JSBSim/models/FGOutput.h b/src/FDM/JSBSim/models/FGOutput.h
index f1cfef7d0..c4ef388d5 100644
--- a/src/FDM/JSBSim/models/FGOutput.h
+++ b/src/FDM/JSBSim/models/FGOutput.h
@@ -45,12 +45,13 @@ INCLUDES
 
 #include "input_output/FGXMLFileRead.h"
 #include "input_output/net_fdm.hxx"
+#include "input_output/FGfdmSocket.h"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_OUTPUT "$Id: FGOutput.h,v 1.17 2009/10/24 22:59:30 jberndt Exp $"
+#define ID_OUTPUT "$Id: FGOutput.h,v 1.18 2010/10/15 11:30:29 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -123,7 +124,7 @@ CLASS DOCUMENTATION
     propulsion       ON|OFF
 </pre>
     NOTE that Time is always output with the data.
-    @version $Id: FGOutput.h,v 1.17 2009/10/24 22:59:30 jberndt Exp $
+    @version $Id: FGOutput.h,v 1.18 2010/10/15 11:30:29 jberndt Exp $
  */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -145,17 +146,19 @@ public:
   void SocketStatusOutput(const std::string&);
   void SocketDataFill(FGNetFDM* net);
 
-
   void SetType(const std::string& type);
+  void SetProtocol(const std::string& protocol);
+  void SetPort(const std::string& port);
   void SetStartNewFile(bool tt) {StartNewFile = tt;}
   void SetSubsystems(int tt) {SubSystems = tt;}
-  void Enable(void) { enabled = true; }
-  void Disable(void) { enabled = false; }
-  bool Toggle(void) {enabled = !enabled; return enabled;}
-  bool Load(Element* el);
   void SetOutputFileName(const std::string& fname) {Filename = fname;}
   void SetDirectivesFile(const std::string& fname) {DirectivesFile = fname;}
   void SetRate(int rt);
+  void Enable(void) { enabled = true; }
+  void Disable(void) { enabled = false; }
+  bool Toggle(void) {enabled = !enabled; return enabled;}
+
+  bool Load(Element* el);
   string GetOutputFileName(void) const {return Filename;}
 
   /// Subsystem types for specifying which will be output in the FDM data logging
@@ -180,14 +183,15 @@ public:
 
 private:
   enum {otNone, otCSV, otTab, otSocket, otTerminal, otFlightGear, otUnknown} Type;
+  FGfdmSocket::ProtocolType Protocol;
   bool sFirstPass, dFirstPass, enabled;
   int SubSystems;
   int runID_postfix;
   bool StartNewFile;
   std::string output_file_name, delimeter, BaseFilename, Filename, DirectivesFile;
+  std::string Port;
   std::ofstream datafile;
   FGfdmSocket* socket;
-  FGfdmSocket* flightGearSocket;
   std::vector <FGPropertyManager*> OutputProperties;
 
   void Debug(int from);
diff --git a/src/FDM/JSBSim/models/FGPropagate.cpp b/src/FDM/JSBSim/models/FGPropagate.cpp
index 1e11074f9..0fec89b0c 100644
--- a/src/FDM/JSBSim/models/FGPropagate.cpp
+++ b/src/FDM/JSBSim/models/FGPropagate.cpp
@@ -71,7 +71,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGPropagate.cpp,v 1.65 2010/09/18 22:48:12 jberndt Exp $";
+static const char *IdSrc = "$Id: FGPropagate.cpp,v 1.71 2010/10/15 11:34:09 jberndt Exp $";
 static const char *IdHdr = ID_PROPAGATE;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -82,7 +82,7 @@ FGPropagate::FGPropagate(FGFDMExec* fdmex) : FGModel(fdmex)
 {
   Debug(0);
   Name = "FGPropagate";
-  gravType = gtStandard;
+  gravType = gtWGS84;
  
   vPQRdot.InitMatrix();
   vQtrndot = FGQuaternion(0,0,0);
@@ -95,6 +95,7 @@ FGPropagate::FGPropagate(FGFDMExec* fdmex) : FGModel(fdmex)
   integrator_translational_position = eTrapezoidal;
 
   VState.dqPQRdot.resize(4, FGColumnVector3(0.0,0.0,0.0));
+  VState.dqPQRidot.resize(4, FGColumnVector3(0.0,0.0,0.0));
   VState.dqUVWidot.resize(4, FGColumnVector3(0.0,0.0,0.0));
   VState.dqInertialVelocity.resize(4, FGColumnVector3(0.0,0.0,0.0));
   VState.dqQtrndot.resize(4, FGQuaternion(0.0,0.0,0.0));
@@ -129,6 +130,7 @@ bool FGPropagate::InitModel(void)
   vInertialVelocity.InitMatrix();
 
   VState.dqPQRdot.resize(4, FGColumnVector3(0.0,0.0,0.0));
+  VState.dqPQRidot.resize(4, FGColumnVector3(0.0,0.0,0.0));
   VState.dqUVWidot.resize(4, FGColumnVector3(0.0,0.0,0.0));
   VState.dqInertialVelocity.resize(4, FGColumnVector3(0.0,0.0,0.0));
   VState.dqQtrndot.resize(4, FGColumnVector3(0.0,0.0,0.0));
@@ -204,6 +206,7 @@ void FGPropagate::SetInitialState(const FGInitialCondition *FGIC)
                                  FGIC->GetRRadpsIC() ) + Tl2b*vOmegaLocal;
 
   VState.vPQRi = VState.vPQR + Ti2b * vOmegaEarth;
+  VState.vPQRi_i = Tb2i * VState.vPQRi;
 
   // Make an initial run and set past values
   InitializeDerivatives();
@@ -246,10 +249,11 @@ bool FGPropagate::Run(void)
   CalculateUVW();              // Translational position derivative (velocities are integrated in the inertial frame)
 
   // Propagate rotational / translational velocity, angular /translational position, respectively.
-  Integrate(VState.vPQRi,             vPQRdot,           VState.dqPQRdot,           dt, integrator_rotational_rate);
-  Integrate(VState.vInertialVelocity, vUVWidot,          VState.dqUVWidot,          dt, integrator_translational_rate);
+
+  Integrate(VState.vPQRi_i,           vPQRidot,          VState.dqPQRidot,          dt, integrator_rotational_rate); // ECI  integration
   Integrate(VState.qAttitudeECI,      vQtrndot,          VState.dqQtrndot,          dt, integrator_rotational_position);
   Integrate(VState.vInertialPosition, VState.vInertialVelocity, VState.dqInertialVelocity, dt, integrator_translational_position);
+  Integrate(VState.vInertialVelocity, vUVWidot,          VState.dqUVWidot,          dt, integrator_translational_rate);
 
   // CAUTION : the order of the operations below is very important to get transformation
   // matrices that are consistent with the new state of the vehicle
@@ -280,6 +284,7 @@ bool FGPropagate::Run(void)
 
   VehicleRadius = GetRadius(); // Calculate current aircraft radius from center of planet
 
+  VState.vPQRi = Ti2b * VState.vPQRi_i;
   VState.vPQR = VState.vPQRi - Ti2b * vOmegaEarth;
 
   VState.qAttitudeLocal = Tl2b.GetQuaternion();
@@ -318,6 +323,7 @@ void FGPropagate::CalculatePQRdot(void)
   // frame.
 
   vPQRdot = Jinv*(vMoments - VState.vPQRi*(J*VState.vPQRi));
+  vPQRidot = Tb2i * vPQRdot;
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -502,7 +508,7 @@ void FGPropagate::ResolveFrictionForces(double dt)
     // Instruct the algorithm to zero out the relative movement between the
     // aircraft and the ground.
     vdot += (VState.vUVW - Tec2b * LocalTerrainVelocity) / dt;
-    wdot += VState.vPQR / dt;
+    wdot += (VState.vPQR - Tec2b * LocalTerrainAngularVelocity) / dt;
   }
 
   // Assemble the linear system of equations
@@ -557,6 +563,7 @@ void FGPropagate::ResolveFrictionForces(double dt)
   vUVWdot += invMass * Fc;
   vUVWidot += invMass * Tb2i * Fc;
   vPQRdot += Jinv * Mc;
+  vPQRidot += Tb2i* Jinv * Mc;
 
   // Save the value of the Lagrange multipliers to accelerate the convergence
   // of the Gauss-Seidel algorithm at next iteration.
@@ -609,7 +616,8 @@ void FGPropagate::SetInertialVelocity(FGColumnVector3 Vi) {
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 void FGPropagate::SetInertialRates(FGColumnVector3 vRates) {
-  VState.vPQRi = Ti2b * vRates;
+  VState.vPQRi_i = vRates;
+  VState.vPQRi = Ti2b * VState.vPQRi_i;
   VState.vPQR = VState.vPQRi - Ti2b * vOmegaEarth;
 }
 
@@ -626,11 +634,13 @@ void FGPropagate::InitializeDerivatives(void)
 
   // Initialize past values deques
   VState.dqPQRdot.clear();
+  VState.dqPQRidot.clear();
   VState.dqUVWidot.clear();
   VState.dqInertialVelocity.clear();
   VState.dqQtrndot.clear();
   for (int i=0; i<4; i++) {
     VState.dqPQRdot.push_front(vPQRdot);
+    VState.dqPQRidot.push_front(vPQRidot);
     VState.dqUVWidot.push_front(vUVWdot);
     VState.dqInertialVelocity.push_front(VState.vInertialVelocity);
     VState.dqQtrndot.push_front(vQtrndot);
@@ -647,7 +657,7 @@ void FGPropagate::RecomputeLocalTerrainRadius(void)
 
   // Get the LocalTerrain radius.
   FDMExec->GetGroundCallback()->GetAGLevel(t, VState.vLocation, contactloc, dv,
-                                           LocalTerrainVelocity);
+                                           LocalTerrainVelocity, LocalTerrainAngularVelocity);
   LocalTerrainRadius = contactloc.GetRadius(); 
 }
 
@@ -712,6 +722,41 @@ void FGPropagate::SetDistanceAGL(double tt)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+void FGPropagate::DumpState(void)
+{
+  cout << endl;
+  cout << fgblue
+       << "------------------------------------------------------------------" << reset << endl;
+  cout << highint
+       << "State Report at sim time: " << FDMExec->GetSimTime() << " seconds" << reset << endl;
+  cout << "  " << underon
+       <<   "Position" << underoff << endl;
+  cout << "    ECI:   " << VState.vInertialPosition.Dump(", ") << " (x,y,z, in ft)" << endl;
+  cout << "    ECEF:  " << VState.vLocation << " (x,y,z, in ft)"  << endl;
+  cout << "    Local: " << VState.vLocation.GetLatitudeDeg()
+                        << ", " << VState.vLocation.GetLongitudeDeg()
+                        << ", " << GetAltitudeASL() << " (lat, lon, alt in deg and ft)" << endl;
+
+  cout << endl << "  " << underon
+       <<   "Orientation" << underoff << endl;
+  cout << "    ECI:   " << VState.qAttitudeECI.GetEulerDeg().Dump(", ") << " (phi, theta, psi in deg)" << endl;
+  cout << "    Local: " << VState.qAttitudeLocal.GetEulerDeg().Dump(", ") << " (phi, theta, psi in deg)" << endl;
+
+  cout << endl << "  " << underon
+       <<   "Velocity" << underoff << endl;
+  cout << "    ECI:   " << VState.vInertialVelocity.Dump(", ") << " (x,y,z in ft/s)" << endl;
+  cout << "    ECEF:  " << (GetTb2ec() * VState.vUVW).Dump(", ")  << " (x,y,z in ft/s)"  << endl;
+  cout << "    Local: " << GetVel() << " (n,e,d in ft/sec)" << endl;
+  cout << "    Body:  " << GetUVW() << " (u,v,w in ft/sec)" << endl;
+
+  cout << endl << "  " << underon
+       <<   "Body Rates (relative to given frame, expressed in body frame)" << underoff << endl;
+  cout << "    ECI:   " << (VState.vPQRi*radtodeg).Dump(", ") << " (p,q,r in deg/s)" << endl;
+  cout << "    ECEF:  " << (VState.vPQR*radtodeg).Dump(", ") << " (p,q,r in deg/s)" << endl;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 void FGPropagate::bind(void)
 {
   typedef double (FGPropagate::*PMF)(int) const;
diff --git a/src/FDM/JSBSim/models/FGPropagate.h b/src/FDM/JSBSim/models/FGPropagate.h
index be8ebd224..86e5cd6a0 100644
--- a/src/FDM/JSBSim/models/FGPropagate.h
+++ b/src/FDM/JSBSim/models/FGPropagate.h
@@ -49,7 +49,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_PROPAGATE "$Id: FGPropagate.h,v 1.48 2010/09/18 22:48:12 jberndt Exp $"
+#define ID_PROPAGATE "$Id: FGPropagate.h,v 1.51 2010/10/07 03:45:40 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -102,7 +102,7 @@ CLASS DOCUMENTATION
     @endcode
 
     @author Jon S. Berndt, Mathias Froehlich
-    @version $Id: FGPropagate.h,v 1.48 2010/09/18 22:48:12 jberndt Exp $
+    @version $Id: FGPropagate.h,v 1.51 2010/10/07 03:45:40 jberndt Exp $
   */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -135,6 +135,11 @@ public:
         units rad/sec */
     FGColumnVector3 vPQRi;
 
+    /** The angular velocity vector for the vehicle body frame relative to the
+        ECI frame, expressed in the ECI frame.
+        units rad/sec */
+    FGColumnVector3 vPQRi_i;
+
     /** The current orientation of the vehicle, that is, the orientation of the
         body frame relative to the local, NED frame. */
     FGQuaternion qAttitudeLocal;
@@ -148,6 +153,7 @@ public:
     FGColumnVector3 vInertialPosition;
 
     deque <FGColumnVector3> dqPQRdot;
+    deque <FGColumnVector3> dqPQRidot;
     deque <FGColumnVector3> dqUVWidot;
     deque <FGColumnVector3> dqInertialVelocity;
     deque <FGQuaternion>    dqQtrndot;
@@ -566,16 +572,6 @@ public:
       VState.vInertialPosition = GetTec2i() * VState.vLocation;
       UpdateLocationMatrices();
   }
-  void SetLocation(const FGLocation& l) {
-      VState.vLocation = l;
-      VState.vInertialPosition = GetTec2i() * VState.vLocation;
-      UpdateLocationMatrices();
-  }
-  void SetLocation(const FGColumnVector3& l) {
-      VState.vLocation = l;
-      VState.vInertialPosition = GetTec2i() * VState.vLocation;
-      UpdateLocationMatrices();
-  }
   void SetAltitudeASL(double altASL);
   void SetAltitudeASLmeters(double altASL) {SetAltitudeASL(altASL/fttom);}
   void SetSeaLevelRadius(double tt) { SeaLevelRadius = tt; }
@@ -588,6 +584,16 @@ public:
       VehicleRadius = GetRadius();
       UpdateLocationMatrices();
   }
+  void SetLocation(const FGLocation& l) {
+      VState.vLocation = l;
+      VState.vInertialPosition = GetTec2i() * VState.vLocation;
+      UpdateLocationMatrices();
+  }
+  void SetLocation(const FGColumnVector3& l) {
+      VState.vLocation = l;
+      VState.vInertialPosition = GetTec2i() * VState.vLocation;
+      UpdateLocationMatrices();
+  }
 
   void RecomputeLocalTerrainRadius(void);
 
@@ -604,6 +610,8 @@ public:
     double value;
   };
 
+  void DumpState(void);
+
 private:
 
 // state vector
@@ -612,6 +620,7 @@ private:
 
   FGColumnVector3 vVel;
   FGColumnVector3 vPQRdot;
+  FGColumnVector3 vPQRidot;
   FGColumnVector3 vUVWdot, vUVWidot;
   FGColumnVector3 vInertialVelocity;
   FGColumnVector3 vLocation;
@@ -633,7 +642,7 @@ private:
   FGMatrix33 Tl2i;
   
   double LocalTerrainRadius, SeaLevelRadius, VehicleRadius;
-  FGColumnVector3 LocalTerrainVelocity;
+  FGColumnVector3 LocalTerrainVelocity, LocalTerrainAngularVelocity;
   eIntegrateType integrator_rotational_rate;
   eIntegrateType integrator_translational_rate;
   eIntegrateType integrator_rotational_position;
diff --git a/src/FDM/JSBSim/models/FGPropulsion.cpp b/src/FDM/JSBSim/models/FGPropulsion.cpp
index f0fbe04b3..21f469c1f 100644
--- a/src/FDM/JSBSim/models/FGPropulsion.cpp
+++ b/src/FDM/JSBSim/models/FGPropulsion.cpp
@@ -65,7 +65,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGPropulsion.cpp,v 1.40 2010/09/07 00:40:03 jberndt Exp $";
+static const char *IdSrc = "$Id: FGPropulsion.cpp,v 1.41 2010/10/15 11:32:41 jberndt Exp $";
 static const char *IdHdr = ID_PROPULSION;
 
 extern short debug_lvl;
@@ -295,29 +295,34 @@ bool FGPropulsion::Load(Element* el)
     document->SetParent(engine_element);
 
     type = document->GetName();
-    if (type == "piston_engine") {
-      HavePistonEngine = true;
-      if (!IsBound) bind();
-      Engines.push_back(new FGPiston(FDMExec, document, numEngines));
-    } else if (type == "turbine_engine") {
-      HaveTurbineEngine = true;
-      if (!IsBound) bind();
-      Engines.push_back(new FGTurbine(FDMExec, document, numEngines));
-    } else if (type == "turboprop_engine") {
-      HaveTurboPropEngine = true;
-      if (!IsBound) bind();
-      Engines.push_back(new FGTurboProp(FDMExec, document, numEngines));
-    } else if (type == "rocket_engine") {
-      HaveRocketEngine = true;
-      if (!IsBound) bind();
-      Engines.push_back(new FGRocket(FDMExec, document, numEngines));
-    } else if (type == "electric_engine") {
-      HaveElectricEngine = true;
-      if (!IsBound) bind();
-      Engines.push_back(new FGElectric(FDMExec, document, numEngines));
-    } else {
-      cerr << "Unknown engine type: " << type << endl;
-      exit(-5);
+    try {
+      if (type == "piston_engine") {
+        HavePistonEngine = true;
+        if (!IsBound) bind();
+        Engines.push_back(new FGPiston(FDMExec, document, numEngines));
+      } else if (type == "turbine_engine") {
+        HaveTurbineEngine = true;
+        if (!IsBound) bind();
+        Engines.push_back(new FGTurbine(FDMExec, document, numEngines));
+      } else if (type == "turboprop_engine") {
+        HaveTurboPropEngine = true;
+        if (!IsBound) bind();
+        Engines.push_back(new FGTurboProp(FDMExec, document, numEngines));
+      } else if (type == "rocket_engine") {
+        HaveRocketEngine = true;
+        if (!IsBound) bind();
+        Engines.push_back(new FGRocket(FDMExec, document, numEngines));
+      } else if (type == "electric_engine") {
+        HaveElectricEngine = true;
+        if (!IsBound) bind();
+        Engines.push_back(new FGElectric(FDMExec, document, numEngines));
+      } else {
+        cerr << "Unknown engine type: " << type << endl;
+        exit(-5);
+      }
+    } catch (std::string str) {
+      cerr << endl << fgred << str << reset << endl;
+      return false;
     }
 
     FCS->AddThrottle();
diff --git a/src/FDM/JSBSim/models/propulsion/FGEngine.cpp b/src/FDM/JSBSim/models/propulsion/FGEngine.cpp
index 6cc525a53..e48e27426 100644
--- a/src/FDM/JSBSim/models/propulsion/FGEngine.cpp
+++ b/src/FDM/JSBSim/models/propulsion/FGEngine.cpp
@@ -54,7 +54,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGEngine.cpp,v 1.39 2010/08/21 17:13:48 jberndt Exp $";
+static const char *IdSrc = "$Id: FGEngine.cpp,v 1.40 2010/10/15 11:32:41 jberndt Exp $";
 static const char *IdHdr = ID_ENGINE;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -109,7 +109,11 @@ FGEngine::FGEngine(FGFDMExec* exec, Element* engine_element, int engine_number)
   // Load thruster
   local_element = engine_element->GetParent()->FindElement("thruster");
   if (local_element) {
-    if (!LoadThruster(local_element)) exit(-1);
+    try {
+      if (!LoadThruster(local_element)) exit(-1);
+    } catch (std::string str) {
+      throw("Error loading engine " + Name + ". " + str);
+    }
   } else {
     cerr << "No thruster definition supplied with engine definition." << endl;
   }
diff --git a/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp b/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp
index 8204bb9d2..f83f961b8 100644
--- a/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp
+++ b/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp
@@ -48,7 +48,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGPropeller.cpp,v 1.30 2010/05/02 15:10:07 jberndt Exp $";
+static const char *IdSrc = "$Id: FGPropeller.cpp,v 1.32 2010/10/21 03:27:40 jberndt Exp $";
 static const char *IdHdr = ID_PROPELLER;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -105,16 +105,20 @@ FGPropeller::FGPropeller(FGFDMExec* exec, Element* prop_element, int num)
   for (int i=0; i<2; i++) {
     table_element = prop_element->FindNextElement("table");
     name = table_element->GetAttributeValue("name");
-    if (name == "C_THRUST") {
-      cThrust = new FGTable(PropertyManager, table_element);
-    } else if (name == "C_POWER") {
-      cPower = new FGTable(PropertyManager, table_element);
-    } else if (name == "CT_MACH") {
-      CtMach = new FGTable(PropertyManager, table_element);
-    } else if (name == "CP_MACH") {
-      CpMach = new FGTable(PropertyManager, table_element);
-    } else {
-      cerr << "Unknown table type: " << name << " in propeller definition." << endl;
+    try {
+      if (name == "C_THRUST") {
+        cThrust = new FGTable(PropertyManager, table_element);
+      } else if (name == "C_POWER") {
+        cPower = new FGTable(PropertyManager, table_element);
+      } else if (name == "CT_MACH") {
+        CtMach = new FGTable(PropertyManager, table_element);
+      } else if (name == "CP_MACH") {
+        CpMach = new FGTable(PropertyManager, table_element);
+      } else {
+        cerr << "Unknown table type: " << name << " in propeller definition." << endl;
+      }
+    } catch (std::string str) {
+      throw("Error loading propeller table:" + name + ". " + str);
     }
   }
 
@@ -334,7 +338,7 @@ double FGPropeller::GetPowerRequired(void)
      if (CL > 1.5) CL = 1.5;
      double BladeArea = Diameter * Diameter / 32.0 * numBlades;
      vTorque(eX) = -Sense*BladeArea*Diameter*Vel*Vel*rho*0.19*CL;
-     PowerRequired = vTorque(eX)*0.2*M_PI;
+     PowerRequired = fabs(vTorque(eX))*0.2*M_PI;
   }
 
   return PowerRequired;

From b1e257781e443d17863b300b7dd1f1de5e7aa58b Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Tue, 26 Oct 2010 10:12:05 +0100
Subject: [PATCH 41/45] Fix VC90 build for JSBSim update

---
 projects/VC90/FlightGear/FlightGear.vcproj | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/projects/VC90/FlightGear/FlightGear.vcproj b/projects/VC90/FlightGear/FlightGear.vcproj
index e97cba54f..6db57814d 100644
--- a/projects/VC90/FlightGear/FlightGear.vcproj
+++ b/projects/VC90/FlightGear/FlightGear.vcproj
@@ -2055,14 +2055,6 @@
 				RelativePath="..\..\..\src\FDM\JSBSim\FGJSBBase.h"
 				>
 			</File>
-			<File
-				RelativePath="..\..\..\src\FDM\JSBSim\FGState.cpp"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\FDM\JSBSim\FGState.h"
-				>
-			</File>
 			<File
 				RelativePath="..\..\..\src\FDM\JSBSim\JSBSim.cxx"
 				>

From 4371a18771829f97c9efa1145ac12f67954574ff Mon Sep 17 00:00:00 2001
From: Torsten Dreyer <Torsten@t3r.de>
Date: Tue, 26 Oct 2010 21:20:01 +0200
Subject: [PATCH 42/45]  resurrection of /sim/rendering/draw-otw

---
 src/Main/viewer.cxx | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/Main/viewer.cxx b/src/Main/viewer.cxx
index ab5f6aa44..05816f8bc 100644
--- a/src/Main/viewer.cxx
+++ b/src/Main/viewer.cxx
@@ -651,6 +651,8 @@ FGViewer::update (double dt)
     }
   }
   recalc();
-  _cameraGroup->update(toOsg(_absolute_view_pos), toOsg(mViewOrientation));
-  _cameraGroup->setCameraParameters(get_v_fov(), get_aspect_ratio());
+  if( fgGetBool( "/sim/rendering/draw-otw", true ) ) {
+    _cameraGroup->update(toOsg(_absolute_view_pos), toOsg(mViewOrientation));
+    _cameraGroup->setCameraParameters(get_v_fov(), get_aspect_ratio());
+  }
 }

From c96206aafd6c9f6e7d3d83b2507e9df5eda3fb55 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Tue, 26 Oct 2010 23:42:34 +0100
Subject: [PATCH 43/45] Tweak shutdown code, chasing intermittent segfaults on
 shutdown.

---
 src/Main/globals.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx
index 33f36ecc8..db6eef28c 100644
--- a/src/Main/globals.cxx
+++ b/src/Main/globals.cxx
@@ -167,6 +167,7 @@ FGGlobals::~FGGlobals()
     // shut down all subsystems, make sure we take down the 
     // AIModels system first.
     SGSubsystem* ai = subsystem_mgr->remove("ai_model");
+    ai->unbind();
     delete ai;
     
     subsystem_mgr->unbind();

From 0320010d955019c6746d7a04ab63daab9a1c0690 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Thu, 28 Oct 2010 13:54:01 +0100
Subject: [PATCH 44/45] Make use of view[0] in HUD-runway lazy.

---
 src/Instrumentation/HUD/HUD.hxx        | 1 -
 src/Instrumentation/HUD/HUD_runway.cxx | 8 ++++----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/Instrumentation/HUD/HUD.hxx b/src/Instrumentation/HUD/HUD.hxx
index 3ef9d7ee7..3408e54c5 100644
--- a/src/Instrumentation/HUD/HUD.hxx
+++ b/src/Instrumentation/HUD/HUD.hxx
@@ -599,7 +599,6 @@ private:
     double _default_heading;
     GLint  _view[4];
     FGRunway* _runway;
-    FGViewer* _cockpit_view;
     unsigned short _stipple_out;    // stipple pattern of the outline of the runway
     unsigned short _stipple_center; // stipple pattern of the center line of the runway
     bool   _draw_arrow;             // draw arrow when runway is not visible in HUD
diff --git a/src/Instrumentation/HUD/HUD_runway.cxx b/src/Instrumentation/HUD/HUD_runway.cxx
index fcf4f1127..ae6ebba65 100644
--- a/src/Instrumentation/HUD/HUD_runway.cxx
+++ b/src/Instrumentation/HUD/HUD_runway.cxx
@@ -49,7 +49,6 @@ HUD::Runway::Runway(HUD *hud, const SGPropertyNode *node, float x, float y) :
     _scale_dist(node->getDoubleValue("scale-dist-nm")),
     _default_pitch(fgGetDouble("/sim/view[0]/config/pitch-pitch-deg", 0.0)),
     _default_heading(fgGetDouble("/sim/view[0]/config/pitch-heading-deg", 0.0)),
-    _cockpit_view(globals->get_viewmgr()->get_view(0)),
     _stipple_out(node->getIntValue("outer_stipple", 0xFFFF)),
     _stipple_center(node->getIntValue("center-stipple", 0xFFFF)),
     _draw_arrow(_arrow_scale > 0 ? true : false),
@@ -69,7 +68,6 @@ HUD::Runway::Runway(HUD *hud, const SGPropertyNode *node, float x, float y) :
     _top = _center_y + (_h / 2) + _y;
 }
 
-
 void HUD::Runway::draw()
 {
     _runway = get_active_runway();
@@ -87,8 +85,10 @@ void HUD::Runway::draw()
     double po = curr_view->getPitchOffset_deg();
     double ho = curr_view->getHeadingOffset_deg();
 
-    double yaw = -(_cockpit_view->getHeadingOffset_deg() - _default_heading) * SG_DEGREES_TO_RADIANS;
-    double pitch = (_cockpit_view->getPitchOffset_deg() - _default_pitch) * SG_DEGREES_TO_RADIANS;
+    FGViewer* cockpitView = globals->get_viewmgr()->get_view(0);
+    
+    double yaw = -(cockpitView->getHeadingOffset_deg() - _default_heading) * SG_DEGREES_TO_RADIANS;
+    double pitch = (cockpitView->getPitchOffset_deg() - _default_pitch) * SG_DEGREES_TO_RADIANS;
     //double roll = fgGetDouble("/sim/view[0]/config/roll-offset-deg",0.0) //TODO: adjust for default roll offset
     double sPitch = sin(pitch), cPitch = cos(pitch),
            sYaw = sin(yaw), cYaw = cos(yaw);

From e9f4106bc16b4dc55cdff4fae5f22ad31d30651a Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Thu, 28 Oct 2010 13:54:45 +0100
Subject: [PATCH 45/45] Remove confusing default (missing) path from 2D panel
 code.

---
 src/Main/fg_commands.cxx |  8 +++++---
 src/Main/fg_init.cxx     | 20 ++++++++++----------
 2 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx
index 74551bc91..4fa1a7dc0 100644
--- a/src/Main/fg_commands.cxx
+++ b/src/Main/fg_commands.cxx
@@ -392,9 +392,11 @@ static bool
 do_panel_load (const SGPropertyNode * arg)
 {
   string panel_path =
-    arg->getStringValue("path",
-			fgGetString("/sim/panel/path",
-				    "Panels/Default/default.xml"));
+    arg->getStringValue("path", fgGetString("/sim/panel/path"));
+  if (panel_path.empty()) {
+    return false;
+  }
+  
   FGPanel * new_panel = fgReadPanel(panel_path);
   if (new_panel == 0) {
     SG_LOG(SG_INPUT, SG_ALERT,
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index f154ab658..b3af6a617 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -1414,20 +1414,20 @@ bool fgInitSubsystems() {
     // Add a new 2D panel.
     ////////////////////////////////////////////////////////////////////
 
-    string panel_path = fgGetString("/sim/panel/path",
-                                    "Panels/Default/default.xml");
-
-    globals->set_current_panel( fgReadPanel(panel_path) );
-    if (globals->get_current_panel() == 0) {
+    string panel_path(fgGetString("/sim/panel/path"));
+    if (!panel_path.empty()) {
+      FGPanel* p = fgReadPanel(panel_path);
+      if (p) {
+        globals->set_current_panel(p);
+        p->init();
+        p->bind();
+        SG_LOG( SG_INPUT, SG_INFO, "Loaded new panel from " << panel_path );
+      } else {
         SG_LOG( SG_INPUT, SG_ALERT,
                 "Error reading new panel from " << panel_path );
-    } else {
-        SG_LOG( SG_INPUT, SG_INFO, "Loaded new panel from " << panel_path );
-        globals->get_current_panel()->init();
-        globals->get_current_panel()->bind();
+      }
     }
 
-
     ////////////////////////////////////////////////////////////////////
     // Initialize the controls subsystem.
     ////////////////////////////////////////////////////////////////////