diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in
index 2b73b7c653f96900202900fefd1753e910838f15..d78c492dc2f7092ee517dda5f7912751ccda2125 100644
--- a/SystemTools.hxx.in
+++ b/SystemTools.hxx.in
@@ -36,8 +36,18 @@ typedef unsigned short mode_t;
 namespace @KWSYS_NAMESPACE@
 {
 
-class SystemToolsManager;
 class SystemToolsTranslationMap;
+class @KWSYS_NAMESPACE@_EXPORT SystemToolsManager
+{
+public:
+  SystemToolsManager();
+  ~SystemToolsManager();
+};
+
+// This instance will show up in any translation unit that uses
+// SystemTools. It will make sure SystemTools is initialized 
+// before it is used and is the last static object destroyed.
+static SystemToolsManager SystemToolsManagerInstance;
 
 /** \class SystemTools
  * \brief A collection of useful platform-independent system functions.
@@ -355,6 +365,14 @@ private:
    */
   static void ClassFinalize();
 
+  /**
+   * This method prevents warning on SGI
+   */
+  SystemToolsManager* GetSystemToolsManager()
+    {
+    return &SystemToolsManagerInstance;
+    }
+
   /**
    * Path translation table from dir to refdir
    * Each time 'dir' will be found it will be replace by 'refdir'
@@ -364,18 +382,6 @@ private:
   friend class SystemToolsManager;
 };
 
-class @KWSYS_NAMESPACE@_EXPORT SystemToolsManager
-{
-public:
-  SystemToolsManager();
-  ~SystemToolsManager();
-};
-
-// This instance will show up in any translation unit that uses
-// SystemTools. It will make sure SystemTools is initialized 
-// before it is used and is the last static object destroyed.
-static SystemToolsManager SystemToolsManagerInstance;
-
 } // namespace @KWSYS_NAMESPACE@
 
 /* Undefine temporary macros.  */