diff -ur 0.9.11-pre2.org/src/AIModel/AIBase.cxx 0.9.11-pre2/src/AIModel/AIBase.cxx
--- 0.9.11-pre2.org/src/AIModel/AIBase.cxx	2007-11-17 17:37:44.000000000 +0900
+++ 0.9.11-pre2/src/AIModel/AIBase.cxx	2007-12-08 16:29:32.000000000 +0900
@@ -67,7 +67,8 @@
     _impact_speed(0),
 
     _refID( _newAIModelID() ),
-    _otype(ot)
+    _otype(ot),
+    _initialized(false)
 {
     tgt_heading = hdg = tgt_altitude_ft = tgt_speed = 0.0;
     tgt_roll = roll = tgt_pitch = tgt_yaw = tgt_vs = vs = pitch = 0.0;
@@ -178,7 +179,9 @@
 
     }
 
-    if (model) {
+    // checking _initialized for avoiding DL stack overflow
+    // caused by multiple registration of aip.getTransform()
+    if (model && _initialized == false) {
         aip.init( model );
         aip.setVisible(true);
         invisible = false;
@@ -194,6 +197,7 @@
 
     props->setStringValue("submodels/path", _path.c_str());
     setDie(false);
+    _initialized = true;
     return true;
 }
 
diff -ur 0.9.11-pre2.org/src/AIModel/AIBase.hxx 0.9.11-pre2/src/AIModel/AIBase.hxx
--- 0.9.11-pre2.org/src/AIModel/AIBase.hxx	2007-11-17 17:37:44.000000000 +0900
+++ 0.9.11-pre2/src/AIModel/AIBase.hxx	2007-12-08 16:29:32.000000000 +0900
@@ -176,6 +176,7 @@
 private:
     int _refID;
     object_type _otype;
+    bool _initialized;
 
 public:
     object_type getType();
diff -ur 0.9.11-pre2.org/src/AIModel/AICarrier.cxx 0.9.11-pre2/src/AIModel/AICarrier.cxx
--- 0.9.11-pre2.org/src/AIModel/AICarrier.cxx	2007-11-17 17:37:44.000000000 +0900
+++ 0.9.11-pre2/src/AIModel/AICarrier.cxx	2007-12-08 16:29:32.000000000 +0900
@@ -38,7 +38,7 @@
 
 
 
-FGAICarrier::FGAICarrier() : FGAIShip(otCarrier) {
+FGAICarrier::FGAICarrier() : FGAIShip(otCarrier), _initialized(false) {
 }
 
 FGAICarrier::~FGAICarrier() {
@@ -263,14 +263,17 @@
     // To avoid that every detail in a carrier 3D model will end into
     // the aircraft local cache, only set the HOT traversal bit on
     // selected objects.
-    ssgEntity *sel = aip.getSceneGraph();
-    // Clear the HOT traversal flag
-    mark_nohot(sel);
-    // Selectively set that flag again for wires/cats/solid objects.
-    // Attach a pointer to this carrier class to those objects.
-    mark_wires(sel, wire_objects);
-    mark_cat(sel, catapult_objects);
-    mark_solid(sel, solid_objects);
+    if (_initialized == false) {
+      ssgEntity *sel = aip.getSceneGraph();
+      // Clear the HOT traversal flag
+      mark_nohot(sel);
+      // Selectively set that flag again for wires/cats/solid objects.
+      // Attach a pointer to this carrier class to those objects.
+      mark_wires(sel, wire_objects);
+      mark_cat(sel, catapult_objects);
+      mark_solid(sel, solid_objects);
+      _initialized = true;
+    }
 
     _longitude_node = fgGetNode("/position/longitude-deg", true);
     _latitude_node = fgGetNode("/position/latitude-deg", true);
diff -ur 0.9.11-pre2.org/src/AIModel/AICarrier.hxx 0.9.11-pre2/src/AIModel/AICarrier.hxx
--- 0.9.11-pre2.org/src/AIModel/AICarrier.hxx	2007-11-17 17:37:44.000000000 +0900
+++ 0.9.11-pre2/src/AIModel/AICarrier.hxx	2007-12-08 16:29:32.000000000 +0900
@@ -191,6 +191,7 @@
     double jbd_pos_norm, raw_jbd_pos_norm;
     double jbd_transition_time, jbd_time_constant;
     bool jbd;
+    bool _initialized;
 };
 
 #endif  // _FG_AICARRIER_HXX
