Index: /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTImportExport.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTImportExport.cpp (revision 8712)
+++ /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTImportExport.cpp (revision 9769)
@@ -35,5 +35,4 @@
     _lastError("")
 {
-    initQuicktime();
 }
 
Index: /OpenSceneGraph/trunk/src/osgPlugins/quicktime/ReaderWriterQT.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osgPlugins/quicktime/ReaderWriterQT.cpp (revision 8972)
+++ /OpenSceneGraph/trunk/src/osgPlugins/quicktime/ReaderWriterQT.cpp (revision 9769)
@@ -37,44 +37,92 @@
 using namespace osg;
 
-// This class is used as a helper to de-initialize
-// properly quicktime, when the last media loaded 
-// with the quicktime plugin is released. 
-// All loaded media must be added to the observer 
-// (see ReaderWriterQT::readImage() function) 
-class QuicktimeExitObserver : public osg::Observer
-{
-public:
-
-   QuicktimeExitObserver () : _instanceCount(0)
-   {
-   }
-   virtual ~QuicktimeExitObserver()
-   {
-   };
-
-   void addMedia(Image* ptr)
-   {
-      ptr->addObserver(this);
-      ++ _instanceCount;
-   }
-   
-   virtual void objectDeleted(void*) 
-   {
-      -- _instanceCount;
-      if(_instanceCount== 0)
-         exitQuicktime();
-   }
-
-private:
-   unsigned int _instanceCount;
-};
-
-
 
 class ReaderWriterQT : public osgDB::ReaderWriter
 {
 public:
+
+
+    // This class is used as a helper to de-initialize
+    // properly quicktime, when the last media loaded 
+    // with the quicktime plugin is released. 
+    // All loaded media must be added to the observer 
+    // (see ReaderWriterQT::readImage() function) 
+    class QuicktimeInitializer : public osg::Observer
+    {
+    public:
+
+       QuicktimeInitializer (): 
+          _instanceCount(0),
+             _setup(false)
+          {}
+
+          virtual ~QuicktimeInitializer()
+          {
+             // When we get here, the exit() function 
+             // should have been called, when last media was released. 
+             // In case no media has been added after initialization, 
+             // let's perform an extra check
+             if (_setup && _instanceCount == 0)
+             {
+                exit();
+             }
+          };
+
+          void addMedia(Image* ptr)
+          {
+             ptr->addObserver(this);
+             ++ _instanceCount;
+          }
+
+          virtual void objectDeleted(void*) 
+          {
+             -- _instanceCount;
+             if(_instanceCount== 0)
+                exit();
+          }
+
+          void init()
+          {
+             if (!_setup)
+             {
+                #ifndef __APPLE__
+                InitializeQTML(0);
+                #endif
+
+                OSErr err = EnterMovies();
+                if (err!=0)
+                   osg::notify(osg::FATAL) << "Error while initializing quicktime: " << err << std::endl; 
+                else
+                   osg::notify(osg::DEBUG_INFO) << "Quicktime initialized successfully"  << std::endl;            
+
+                _setup = true;            
+             }
+          }
+
+          void exit()
+          {
+             #ifndef __APPLE__
+             ExitMovies();
+             #endif
+
+             _setup = false;
+          }
+
+    private:
+       unsigned int _instanceCount;
+       bool _setup;
+
+    };
+
+
+
+
+
     ReaderWriterQT::ReaderWriterQT()
     {
+
+       registerQtReader();
+
+
         supportsExtension("mov","Movie format");
         supportsExtension("mpg","Movie format");
@@ -229,6 +277,7 @@
                   // and before any image or movie is loaded. 
                   // After the first call the function does nothing. 
-                  // The cleaning up is left to the QuicktimeExitObserver (see below)
-                  initQuicktime();
+                  // The cleaning up is left to the QuicktimeInitializer (see below)
+                  _qtExitObserver.init();
+
                   //
                   QuicktimeLiveImageStream* p_qt_image_stream = new QuicktimeLiveImageStream(osgDB::getNameLessExtension(file));
@@ -253,6 +302,6 @@
       // and before any image or movie is loaded. 
       // After the first call the function does nothing. 
-      // The cleaning up is left to the QuicktimeExitObserver (see below)
-      initQuicktime();
+      // The cleaning up is left to the QuicktimeInitializer (see below)
+      _qtExitObserver.init();
 
 
@@ -317,4 +366,6 @@
             }
         }
+
+        _qtExitObserver.init();
         
         QuicktimeImportExport importer;
@@ -335,5 +386,5 @@
         if (!acceptsExtension(ext)) return WriteResult::FILE_NOT_HANDLED;
 
-        initQuicktime();
+        _qtExitObserver.init();
 
         //Buidl map  of extension <-> osFileTypes
@@ -387,4 +438,6 @@
         }
         
+        _qtExitObserver.init();
+
         QuicktimeImportExport exporter;
         exporter.writeToStream(os, const_cast<osg::Image*>(&img), filename);
@@ -396,6 +449,33 @@
     }
 
-
-    mutable QuicktimeExitObserver _qtExitObserver;
+protected:
+
+   //internal utils
+   void registerQtReader() const
+   {
+      osgDB::Registry* r = osgDB::Registry::instance();
+      r->addFileExtensionAlias("mov",  "qt");
+
+      #ifdef QT_HANDLE_IMAGES_ALSO
+      r->addFileExtensionAlias("jpg",  "qt");
+      r->addFileExtensionAlias("jpe",  "qt");
+      r->addFileExtensionAlias("jpeg", "qt");
+      r->addFileExtensionAlias("tif",  "qt");
+      r->addFileExtensionAlias("tiff", "qt");
+      r->addFileExtensionAlias("gif",  "qt");
+      r->addFileExtensionAlias("png",  "qt");
+      r->addFileExtensionAlias("psd",  "qt");
+      r->addFileExtensionAlias("tga",  "qt");
+      r->addFileExtensionAlias("mov",  "qt");
+      r->addFileExtensionAlias("avi",  "qt");
+      r->addFileExtensionAlias("mpg",  "qt");
+      r->addFileExtensionAlias("mpv",  "qt");
+      r->addFileExtensionAlias("dv",   "qt");
+      r->addFileExtensionAlias("mp4",  "qt");
+      r->addFileExtensionAlias("m4v",  "qt");         
+      #endif
+   }
+
+    mutable QuicktimeInitializer _qtExitObserver;
 };
 
Index: /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.cpp (revision 8806)
+++ /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.cpp (revision 9769)
@@ -16,79 +16,4 @@
 using namespace std;
 
-
-
-    class QuicktimeInitializer : public osg::Referenced {
-        public:
-            QuicktimeInitializer() :osg::Referenced() {
-               
-                 #ifndef __APPLE__
-                     InitializeQTML(0);
-                 #endif
-                 OSErr err = EnterMovies();
-                 if (err!=0)
-                    osg::notify(osg::FATAL) << "Error while initializing quicktime: " << err << endl; 
-                 else
-                    osg::notify(osg::DEBUG_INFO) << "Quicktime initialized successfully"  << endl;
-
-                 static bool registered = false;
-
-                 if (!registered){
-                     registerQTReader(); 
-                     registered = true;    
-                 }                 
-            }
-            
-            ~QuicktimeInitializer() {
-                #ifndef __APPLE__
-                    ExitMovies();
-                #endif
-                //osg::notify(osg::DEBUG_INFO) << "Quicktime deinitialized successfully"  << endl;
-            }
-
-    protected:
-        void registerQTReader() {
-            osgDB::Registry* r = osgDB::Registry::instance();
-         r->addFileExtensionAlias("mov",  "qt");
-
-         #ifdef QT_HANDLE_IMAGES_ALSO
-            r->addFileExtensionAlias("jpg",  "qt");
-            r->addFileExtensionAlias("jpe",  "qt");
-            r->addFileExtensionAlias("jpeg", "qt");
-            r->addFileExtensionAlias("tif",  "qt");
-            r->addFileExtensionAlias("tiff", "qt");
-            r->addFileExtensionAlias("gif",  "qt");
-            r->addFileExtensionAlias("png",  "qt");
-            r->addFileExtensionAlias("psd",  "qt");
-            r->addFileExtensionAlias("tga",  "qt");
-            r->addFileExtensionAlias("mov",  "qt");
-            r->addFileExtensionAlias("avi",  "qt");
-            r->addFileExtensionAlias("mpg",  "qt");
-            r->addFileExtensionAlias("mpv",  "qt");
-            r->addFileExtensionAlias("dv",   "qt");
-            r->addFileExtensionAlias("mp4",  "qt");
-            r->addFileExtensionAlias("m4v",  "qt");         
-         #endif
-        }
-                
-    };
-    
-    void initQuicktime(bool erase) {
-
-        static osg::ref_ptr<QuicktimeInitializer> s_qt_init = new QuicktimeInitializer();
-        if (erase) {
-            s_qt_init = NULL;
-        } else if (!s_qt_init.valid())
-        {
-            s_qt_init = new QuicktimeInitializer();
-        }
-    }
-
-    
-    void exitQuicktime() {
-        initQuicktime(true);
-    }
-
-
-    
 
     // ---------------------------------------------------------------------------
Index: /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.h
===================================================================
--- /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.h (revision 8797)
+++ /OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.h (revision 9769)
@@ -50,14 +50,4 @@
 
 #endif
-
-
-    /**
-     * inits Quicktime, if erase = true, the Quicktime-stuff gets cleaned, call it before your app exits
-     * @param erase true, if you want to cleanup quicktime-related stuff
-     */
-    void initQuicktime(bool erase = false);
-    
-    /** cleans up all quicktime-related stuff */
-    void exitQuicktime();
     
     /** constructs an FSSpec out of an path */
