diff --git a/src/ATC/AIMgr.cxx b/src/ATC/AIMgr.cxx
index 58e988679..50662f547 100644
--- a/src/ATC/AIMgr.cxx
+++ b/src/ATC/AIMgr.cxx
@@ -53,11 +53,12 @@ FGAIMgr::FGAIMgr() {
 	// TODO - use the proper user callsign when it becomes user settable.
 	removalList.clear();
 	activated.clear();
+	_havePiperModel = true;
 }
 
 FGAIMgr::~FGAIMgr() {
 	_defaultModel->deRef();
-	_piperModel->deRef();
+	if(_havePiperModel) _piperModel->deRef();
 }
 
 void FGAIMgr::init() {
@@ -75,20 +76,39 @@ void FGAIMgr::init() {
 	// Load up models at the start to avoid pausing later
 	// Hack alert - Hardwired paths!!
 	string planepath = "Aircraft/c172/Models/c172-dpm.ac";
-	_defaultModel = sgLoad3DModel( globals->get_fg_root(),
-	                               planepath.c_str(),
-	                               globals->get_props(),
-	                               globals->get_sim_time_sec() );
+	bool _loadedDefaultOK = true;
+	try {
+		_defaultModel = sgLoad3DModel( globals->get_fg_root(),
+	    	                           planepath.c_str(),
+									   globals->get_props(),
+									   globals->get_sim_time_sec() );
+	} catch(sg_exception& e) {
+		_loadedDefaultOK = false;
+	}
+	
+	if(!_loadedDefaultOK ) {
+		// Just load the same 3D model as the default user plane - that's *bound* to exist!
+		// TODO - implement robust determination of availability of GA AI aircraft models
+		planepath = "Aircraft/c172p/Models/c172p.ac";
+		_defaultModel = sgLoad3DModel( globals->get_fg_root(),
+	    	                           planepath.c_str(),
+									   globals->get_props(),
+									   globals->get_sim_time_sec() );
+	}
 
 	planepath = "Aircraft/pa28-161/Models/pa28-161.ac";
-	_piperModel = sgLoad3DModel( globals->get_fg_root(),
-	                             planepath.c_str(),
-	                             globals->get_props(),
-	                             globals->get_sim_time_sec() );
+	try {
+		_piperModel = sgLoad3DModel( globals->get_fg_root(),
+	    	                         planepath.c_str(),
+									 globals->get_props(),
+									 globals->get_sim_time_sec() );
+	} catch(sg_exception& e) {
+		_havePiperModel = false;
+	}
 
 	// We need to keep one ref of the models open to stop ssg deleting them behind our back!
 	_defaultModel->ref();
-	_piperModel->ref();
+	if(_havePiperModel) _piperModel->ref();
 
 	// go through the $FG_ROOT/ATC directory and find all *.taxi files
 	SGPath path(globals->get_fg_root());
@@ -448,7 +468,7 @@ void FGAIMgr::GenerateSimpleAirportTraffic(string ident, double min_dist) {
 			else cessna = true;
 			string s = GenerateShortForm(GenerateUniqueCallsign(), (cessna ? "Cessna-" : "Piper-"));
 			FGAIGAVFRTraffic* t = new FGAIGAVFRTraffic();
-			t->SetModel(cessna ? _defaultModel : _piperModel);
+			t->SetModel(cessna ? _defaultModel : (_havePiperModel ? _piperModel : _defaultModel));
 			//cout << "Generating VFR traffic " << s << " inbound to " << ident << " " << ad << " meters out from " << dir << " degrees\n";
 			Point3D tpos = dclUpdatePosition(aptpos, dir, 6.0, ad);
 			if(tpos.elev() > (aptpos.elev() + 3000.0)) tpos.setelev(aptpos.elev() + 3000.0);	// FEET yuk :-(
diff --git a/src/ATC/AIMgr.hxx b/src/ATC/AIMgr.hxx
index b15d3efdc..f34cdc151 100644
--- a/src/ATC/AIMgr.hxx
+++ b/src/ATC/AIMgr.hxx
@@ -131,7 +131,9 @@ private:
 	string GenerateUniqueCallsign();
 	
 	string GenerateShortForm(string callsign, string plane_str = "Cessna-", bool local = false);
-
+	
+	// TODO - implement a proper robust system for registering and loading AI GA aircraft models
+	bool _havePiperModel;
 };
 
 #endif  // _FG_AIMGR_HXX