From bbcf980f4a694461bc9ea7bd2b92b8be3e1d4636 Mon Sep 17 00:00:00 2001
From: dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>
Date: Sun, 25 Sep 2011 13:05:36 +0000
Subject: Release-1.7.5.1-20110925

---
 Doxyfile                  |   2 +-
 INSTALL                   |   4 +-
 README                    |   4 +-
 configure                 |   2 +-
 doc/config.doc            |   4 +-
 doc/index.doc             |   2 +-
 doc/language.doc          |   4 +-
 doc/translator_report.txt |  69 +----
 qtools/Doxyfile           |  10 +-
 src/cite.cpp              |  15 +-
 src/classdef.cpp          |  22 +-
 src/classdef.h            |   2 +-
 src/config.xml            |  12 +-
 src/configoptions.cpp     |  12 +-
 src/definition.cpp        |   6 +-
 src/definition.h          |   2 +-
 src/docsets.cpp           |   4 +-
 src/docsets.h             |   8 +-
 src/doctokenizer.l        |   7 +-
 src/dot.cpp               |   3 -
 src/doxygen.bst           |   4 +-
 src/doxygen.cpp           |  88 +++---
 src/doxygen_bst.h         |   4 +-
 src/eclipsehelp.cpp       |   6 +-
 src/eclipsehelp.h         |   4 +-
 src/filedef.cpp           | 155 ++++++----
 src/filedef.h             |   6 +-
 src/ftvhelp.cpp           | 598 +++++++-----------------------------
 src/ftvhelp.h             |   7 +-
 src/groupdef.cpp          |   4 +-
 src/htmldocvisitor.cpp    |   2 +-
 src/htmlgen.cpp           | 204 +++++--------
 src/htmlgen.h             |   3 +-
 src/htmlhelp.cpp          |  11 +-
 src/htmlhelp.h            |   8 +-
 src/index.cpp             | 668 ++++++++++++++++++++++++++++------------
 src/index.h               |  51 ++--
 src/latexgen.cpp          |   4 +-
 src/latexgen.h            |   1 +
 src/layout.cpp            |  25 +-
 src/layout.h              |   7 +-
 src/layout_default.h      |   6 +-
 src/layout_default.xml    |   6 +-
 src/libdoxygen.t          |   3 +
 src/mandocvisitor.cpp     |   2 +-
 src/mangen.h              |   1 +
 src/memberlist.cpp        |  35 ++-
 src/namespacedef.cpp      |   2 +-
 src/navtree.css           |   6 +-
 src/navtree.js            | 243 +++++++++++----
 src/navtree_css.h         |   6 +-
 src/navtree_js.h          | 243 +++++++++++----
 src/outputgen.h           |   1 +
 src/outputlist.h          |   2 +
 src/pagedef.cpp           |   2 +-
 src/perlmodgen.cpp        |   2 +-
 src/pre.l                 |  66 +++-
 src/qhp.cpp               |   3 +-
 src/qhp.h                 |   3 +-
 src/rtfgen.h              |   1 +
 src/svgpan.js             |  19 +-
 src/svgpan_js.h           |  19 +-
 src/tagreader.cpp         |   2 +-
 src/translator_am.h       |   2 +-
 src/translator_id.h       | 761 +++++++++++++++++++++++++++++++---------------
 src/xmlgen.cpp            |   4 +-
 winbuild/Doxygen.vcproj   |   2 +-
 67 files changed, 1934 insertions(+), 1562 deletions(-)

diff --git a/Doxyfile b/Doxyfile
index fe3e33a..621c9d9 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -185,7 +185,7 @@ QHP_SECT_FILTER_ATTRS  =
 QHG_LOCATION           =
 GENERATE_ECLIPSEHELP   = NO
 ECLIPSE_DOC_ID         = org.doxygen.Project
-DISABLE_INDEX          = NO
+DISABLE_INDEX          = YES
 ENUM_VALUES_PER_LINE   = 4
 GENERATE_TREEVIEW      = YES
 USE_INLINE_TREES       = YES
diff --git a/INSTALL b/INSTALL
index 5011525..f50fc35 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.7.5.1
+DOXYGEN Version 1.7.5.1-20110925
 
 Please read the installation section of the manual 
 (http://www.doxygen.org/install.html) for instructions.
 
 --------
-Dimitri van Heesch (21 August 2011)
+Dimitri van Heesch (25 September 2011)
diff --git a/README b/README
index 12752cd..5fe20b2 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.7.5.1
+DOXYGEN Version 1.7.5.1_20110925
 
 Please read INSTALL for compilation instructions.
 
@@ -26,4 +26,4 @@ forum.
 
 Enjoy,
 
-Dimitri van Heesch (dimitri@stack.nl) (21 August 2011)
+Dimitri van Heesch (dimitri@stack.nl) (25 September 2011)
diff --git a/configure b/configure
index a67f0e4..084edff 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=7
 doxygen_version_revision=5.1
 
 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=NO
+doxygen_version_mmn=20110925
 
 bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
 
diff --git a/doc/config.doc b/doc/config.doc
index 21b8262..022f4cd 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -1711,7 +1711,9 @@ and does not have live searching capabilities.
  might be necessary to disable the index and replace it with your own.
  The \c DISABLE_INDEX tag can be used to turn on/off the condensed index at
  top of each page. A value of NO (the default) enables the index and the
- value YES disables it.
+ value \c YES disables it. Since the tabs have the same information as the 
+ navigation tree you can set this option to \c NO if you already set 
+ \ref cfg_generate_treeview "GENERATE_TREEVIEW" to \c YES.
 
 \anchor cfg_enum_values_per_line
 <dt>\c ENUM_VALUES_PER_LINE <dd>
diff --git a/doc/index.doc b/doc/index.doc
index 0609b11..fca1bd3 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -14,7 +14,7 @@
  * input used in their production; they are not affected by this license.
  *
  */
-/*! \page index 
+/*! \mainpage 
 \if logo_on
 <center>
 \htmlonly
diff --git a/doc/language.doc b/doc/language.doc
index bced9a4..51bcfec 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -164,7 +164,7 @@ when the translator was updated.
     <td>Indonesian</td>
     <td>Hendy Irawan</td>
     <td>ceefour at gauldong dot net</td>
-    <td>1.4.6</td>
+    <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>Italian</td>
@@ -359,7 +359,7 @@ when the translator was updated.
   Hungarian & Ákos Kiss & {\tt\tiny akiss at users dot sourceforge dot net} & 1.4.6 \\
   ~ & Földvári György & {\tt\tiny [unreachable] foldvari lost at cyberspace} & ~ \\
   \hline
-  Indonesian & Hendy Irawan & {\tt\tiny ceefour at gauldong dot net} & 1.4.6 \\
+  Indonesian & Hendy Irawan & {\tt\tiny ceefour at gauldong dot net} & up-to-date \\
   \hline
   Italian & Alessandro Falappa & {\tt\tiny alessandro at falappa dot net} & 1.7.5 \\
   ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23 at cam dot ac dot uk} & ~ \\
diff --git a/doc/translator_report.txt b/doc/translator_report.txt
index 46cb70f..fd23384 100644
--- a/doc/translator_report.txt
+++ b/doc/translator_report.txt
@@ -10,7 +10,7 @@ Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Serbian,
 SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
 and Vietnamese.
 
-Of them, 15 translators are up-to-date, 24 translators are based on
+Of them, 16 translators are up-to-date, 23 translators are based on
 some adapter class, and 2 are English based.
 
 ----------------------------------------------------------------------
@@ -19,7 +19,7 @@ alphabetically). This means that they derive from the Translator class
 and they implement all 228 of the required methods. Anyway, there
 still may be some details listed even for them:
 
-  TranslatorArmenian -- Change the base class to Translator.
+  TranslatorArmenian
   TranslatorBrazilian
   TranslatorCatalan
   TranslatorChinesetraditional -- Reimplementation using UTF-8 suggested.
@@ -32,6 +32,7 @@ still may be some details listed even for them:
   TranslatorFrench -- Reimplementation using UTF-8 suggested.
   TranslatorGerman
   TranslatorGreek
+  TranslatorIndonesian -- Reimplementation using UTF-8 suggested.
   TranslatorPortuguese
   TranslatorSlovak
 
@@ -81,9 +82,6 @@ must be implemented to become up-to-date:
   TranslatorLithuanian            1.4.6 	36 methods to implement (15 %)
 	Note: Reimplementation using UTF-8 suggested.
 
-  TranslatorIndonesian            1.4.6 	35 methods to implement (15 %)
-	Note: Reimplementation using UTF-8 suggested.
-
   TranslatorHungarian             1.4.6 	36 methods to implement (15 %)
 	Note: Reimplementation using UTF-8 suggested.
 
@@ -115,6 +113,7 @@ for occurence of the method identifiers:
   QCString trDCOPMethods()
   QCString trDirDependency(const char *)
   QCString trFunctionPrototypeDocumentation()
+  QCString trGraphicalHierarchy()
   QCString trSearchForIndex()
 
 
@@ -200,12 +199,6 @@ TranslatorArabic   (TranslatorAdapter_1_4_6)  35 methods to implement (15 %)
     virtual QCString trNoDescriptionAvailable()
 
 
-TranslatorArmenian   (TranslatorAdapter_1_7_5)
-------------------
-
-  Implements 228 of the required methods (100 %).
-
-
 TranslatorChinesetraditional   (Translator)
 ----------------------------
 
@@ -302,60 +295,10 @@ TranslatorHungarian   (TranslatorAdapter_1_4_6)  36 methods to implement (15 %)
     virtual QCString trSubprogramDocumentation()
 
 
-TranslatorIndonesian   (TranslatorAdapter_1_4_6)  35 methods to implement (15 %)
+TranslatorIndonesian   (Translator)
 --------------------
 
-  Implements 193 of the required methods (84 %).
-
-  Missing methods (should be implemented):
-
-    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
-    virtual QCString trSearching()
-    virtual QCString trNoMatches()
-    virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
-    virtual QCString trLoading()
-    virtual QCString trSubprograms()
-    virtual QCString trDateTime(int year, int month, int day, int dayOfWeek, int hour, int minutes, int seconds, bool includeTime)
-    virtual QCString trModulesListDescription(bool extractAll)
-    virtual QCString trModulesList()
-    virtual QCString trTypeConstraints()
-    virtual QCString trFileIn(const char * name)
-    virtual QCString trGlobalNamespace()
-    virtual QCString trMemberFunctionDocumentationFortran()
-    virtual QCString trCompoundListDescriptionFortran()
-    virtual QCString trTypeDocumentation()
-    virtual QCString trModuleReference(const char * namespaceName)
-    virtual QCString trModulesMemberDescription(bool extractAll)
-    virtual QCString trModulesMembers()
-    virtual QCString trDirDepGraph(const char * name)
-    virtual QCString trModulesIndex()
-    virtual QCString trDirRelation(const char * name)
-    virtual QCString trCompoundListFortran()
-    virtual QCString trDataTypes()
-    virtual QCString trCiteReferences()
-    virtual QCString trDirDependency(const char * name)
-    virtual QCString trCopyright()
-    virtual QCString trIncludesFileIn(const char * name)
-    virtual QCString trCompoundIndexFortran()
-    virtual QCString trSubprogram(bool first_capital, bool singular)
-    virtual QCString trCallerGraph()
-    virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate)
-    virtual QCString trType(bool first_capital, bool singular)
-    virtual QCString trModule(bool first_capital, bool singular)
-    virtual QCString trCompoundMembersFortran()
-    virtual QCString trSubprogramDocumentation()
-
-  Obsolete methods (should be removed, never used):
-
-    virtual QCString trHeaderFilesDescription()
-    virtual QCString trField(bool first_capital, bool)
-    virtual QCString trPackageDocumentation()
-    virtual QCString trSources()
-    virtual QCString trReimplementedForInternalReasons()
-    virtual QCString trInterfaces()
-    virtual QCString trHeaderFiles()
-    virtual QCString trBugsAndLimitations()
-    virtual QCString trNoDescriptionAvailable()
+  Implements 228 of the required methods (100 %).
 
 
 TranslatorItalian   (TranslatorAdapter_1_7_5)  3 methods to implement (1 %)
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index 0923047..5934468 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -45,7 +45,7 @@ SYMBOL_CACHE_SIZE      = 0
 # Build related configuration options
 #---------------------------------------------------------------------------
 EXTRACT_ALL            = YES
-EXTRACT_PRIVATE        = YES
+EXTRACT_PRIVATE        = NO
 EXTRACT_STATIC         = YES
 EXTRACT_LOCAL_CLASSES  = YES
 EXTRACT_LOCAL_METHODS  = NO
@@ -129,7 +129,7 @@ IGNORE_PREFIX          = Q
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
-GENERATE_HTML          = NO
+GENERATE_HTML          = YES
 HTML_OUTPUT            =
 HTML_FILE_EXTENSION    = .html
 HTML_HEADER            = 
@@ -164,10 +164,10 @@ QHP_SECT_FILTER_ATTRS  =
 QHG_LOCATION           =
 GENERATE_ECLIPSEHELP   = YES
 ECLIPSE_DOC_ID         = org.doxygen.qtools
-DISABLE_INDEX          = NO
+DISABLE_INDEX          = YES
 ENUM_VALUES_PER_LINE   = 4
 GENERATE_TREEVIEW      = YES
-USE_INLINE_TREES       = NO
+USE_INLINE_TREES       = YES
 TREEVIEW_WIDTH         = 250
 EXT_LINKS_IN_WINDOW    = NO
 FORMULA_FONTSIZE       = 10
@@ -175,7 +175,7 @@ FORMULA_TRANSPARENT    = YES
 USE_MATHJAX            = NO
 MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
 SEARCHENGINE           = YES
-SERVER_BASED_SEARCH    = YES
+SERVER_BASED_SEARCH    = NO
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
diff --git a/src/cite.cpp b/src/cite.cpp
index 018d9cf..d19dfc1 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -75,10 +75,11 @@ bool CiteDict::writeAux()
       QFileInfo fi(bibFile); // open file (with .bib extension)
       if (fi.exists())
       {
-        if (!copyFile(bibFile,m_baseFileName+"_"+bibFile))
+        if (!copyFile(bibFile,m_baseFileName+"_"+fi.fileName().data()))
         {
           return FALSE;
         }
+        bibFile = fi.fileName().data();
         if (bibFile.right(4)==".bib")
         {
           bibFile = bibFile.left(bibFile.length()-4);
@@ -300,9 +301,17 @@ void CiteDict::resolve()
     {
       QCString bibFile = bibdata;
       if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
-      if (!bibFile.isEmpty())
+      QFileInfo fi(bibFile);
+      if (fi.exists())
+      {
+        if (!bibFile.isEmpty())
+        {
+          copyFile(bibFile,latexOutputDir+fi.fileName().data());
+        }
+      }
+      else
       {
-        copyFile(bibFile,latexOutputDir+bibFile);
+        err("Error: bib file %s not found!\n",bibFile.data());
       }
       bibdata = citeDataList.next();
     }
diff --git a/src/classdef.cpp b/src/classdef.cpp
index c69c300..f868037 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -2023,7 +2023,7 @@ void ClassDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
             if (createSubDirs) ol.writeString("../../");
             ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
             ol.writeString("\">");
-            ol.writeString(md->name());
+            ol.writeString(convertToHtml(md->name()));
             ol.writeString("</a>");
           }
           ol.writeString("</td></tr>\n");
@@ -2080,7 +2080,7 @@ void ClassDef::writeMemberList(OutputList &ol)
   {
     if (getOuterScope()!=Doxygen::globalScope)
     {
-      writeNavigationPath(ol);
+      writeNavigationPath(ol,FALSE);
     }
     ol.endQuickIndices();
   }
@@ -3209,26 +3209,18 @@ QCString ClassDef::getOutputFileBase() const
     // point to simple struct inside a group
     return partOfGroups()->at(0)->getOutputFileBase();
   }
-  else if (inlineSimpleClasses && m_impl->isSimple && (scope=getOuterScope()) && 
-            (
-              (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) || 
-              scope->isLinkableInProject()
-            )
-          )
+  else if (inlineSimpleClasses && m_impl->isSimple && (scope=getOuterScope()))
   {
-    if (scope==Doxygen::globalScope) // simple struct embedded in file
+    if (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) // simple struct embedded in file
     {
       return getFileDef()->getOutputFileBase();
     }
-    else // simple struct embedded in other container (namespace/group/class)
+    else if (scope->isLinkableInProject()) // simple struct embedded in other container (namespace/group/class)
     {
       return getOuterScope()->getOutputFileBase();
     }
   }
-  else
-  {
-    return getXmlOutputFileBase();
-  }
+  return getXmlOutputFileBase();
 }
 
 QCString ClassDef::getInstanceOutputFileBase() const 
@@ -3754,7 +3746,7 @@ bool ClassDef::isLocal() const
   return m_impl->isLocal; 
 }
 
-ClassSDict *ClassDef::getInnerClasses() 
+ClassSDict *ClassDef::getClassSDict() 
 { 
   return m_impl->innerClasses; 
 }
diff --git a/src/classdef.h b/src/classdef.h
index 9673ec9..f2d5b3a 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -113,7 +113,7 @@ class ClassDef : public Definition
     bool isLocal() const;
 
     /*! returns the classes nested into this class */
-    ClassSDict *getInnerClasses();
+    ClassSDict *getClassSDict();
 
     /*! returns TRUE if this class has documentation */
     bool hasDocumentation() const;
diff --git a/src/config.xml b/src/config.xml
index f9bd11c..8f4d36d 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -1004,9 +1004,11 @@ the directory name containing the HTML and XML files should also have
 this name.
 ' defval='org.doxygen.Project' depends='GENERATE_ECLIPSEHELP'/>
     <option type='bool' id='DISABLE_INDEX' docs='
-The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-top of each HTML page. The value NO (the default) enables the index and 
-the value YES disables it. 
+The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) 
+at top of each HTML page. The value NO (the default) enables the index and 
+the value YES disables it. Since the tabs have the same information as the 
+navigation tree you can set this option to NO if you already set 
+GENERATE_TREEVIEW to YES.
 ' defval='0' depends='GENERATE_HTML'/>
     <option type='int' id='ENUM_VALUES_PER_LINE' docs='
 The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
@@ -1021,7 +1023,9 @@ If the tag value is set to YES, a side panel will be generated
 containing a tree-like index structure (just like the one that 
 is generated for HTML Help). For this to work a browser that supports 
 JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
-Windows users are probably better off using the HTML help feature.
+Windows users are probably better off using the HTML help feature. 
+Since the tree basically has the same information as the tab index you 
+could consider to set DISABLE_INDEX to NO when enabling this option.
 ' depends='GENERATE_HTML'/>
     <option type='bool' id='USE_INLINE_TREES' defval='0' docs='
 By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 61fc635..a632acb 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -1474,9 +1474,11 @@ void addConfigOptions(Config *cfg)
   //----
   cb = cfg->addBool(
                  "DISABLE_INDEX",
-                 "The DISABLE_INDEX tag can be used to turn on/off the condensed index at\n"
-                 "top of each HTML page. The value NO (the default) enables the index and\n"
-                 "the value YES disables it.",
+                 "The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)\n"
+                 "at top of each HTML page. The value NO (the default) enables the index and\n"
+                 "the value YES disables it. Since the tabs have the same information as the\n"
+                 "navigation tree you can set this option to NO if you already set\n"
+                 "GENERATE_TREEVIEW to YES.",
                  FALSE
                 );
   cb->addDependency("GENERATE_HTML");
@@ -1499,7 +1501,9 @@ void addConfigOptions(Config *cfg)
                  "containing a tree-like index structure (just like the one that\n"
                  "is generated for HTML Help). For this to work a browser that supports\n"
                  "JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).\n"
-                 "Windows users are probably better off using the HTML help feature.",
+                 "Windows users are probably better off using the HTML help feature.\n"
+                 "Since the tree basically has the same information as the tab index you\n"
+                 "could consider to set DISABLE_INDEX to NO when enabling this option.",
                  FALSE
                 );
   cb->addDependency("GENERATE_HTML");
diff --git a/src/definition.cpp b/src/definition.cpp
index 2abd726..911e156 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -1329,7 +1329,7 @@ void Definition::writePathFragment(OutputList &ol) const
   ol.writeString("      </li>\n");
 }
 
-void Definition::writeNavigationPath(OutputList &ol) const
+void Definition::writeNavigationPath(OutputList &ol,bool showSearchInfo) const
 {
   static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
 
@@ -1340,6 +1340,10 @@ void Definition::writeNavigationPath(OutputList &ol) const
   {
     ol.writeString("</div>\n");
   }
+  if (showSearchInfo)
+  {
+    ol.writeSearchInfo();
+  }
 
   ol.writeString("  <div id=\"nav-path\" class=\"navpath\">\n");
   ol.writeString("    <ul>\n");
diff --git a/src/definition.h b/src/definition.h
index bf7f38c..a2f00f0 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -311,7 +311,7 @@ class Definition : public DefinitionIntf, public LockableObj
     void writeSourceReffedBy(OutputList &ol,const char *scopeName);
     void makePartOfGroup(GroupDef *gd);
     void writePathFragment(OutputList &ol) const;
-    void writeNavigationPath(OutputList &ol) const;
+    void writeNavigationPath(OutputList &ol,bool showSearchInfo=TRUE) const;
     virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const {}
     virtual void writeSummaryLinks(OutputList &) {}
     QCString pathFragment() const;
diff --git a/src/docsets.cpp b/src/docsets.cpp
index 7d7dd2e..fa86dc8 100644
--- a/src/docsets.cpp
+++ b/src/docsets.cpp
@@ -211,7 +211,9 @@ void DocSets::addContentsItem(bool isDir,
                               const char *name, 
                               const char *ref, 
                               const char *file,
-                              const char *anchor)
+                              const char *anchor,
+                              bool /* separateIndex */,
+                              bool /* addToNavIndex */)
 {
   (void)isDir;
   if (file && ref==0)
diff --git a/src/docsets.h b/src/docsets.h
index 0b6e9af..4a13d88 100644
--- a/src/docsets.h
+++ b/src/docsets.h
@@ -41,9 +41,11 @@ class DocSets  : public IndexIntf
     void decContentsDepth();
     void addContentsItem(bool isDir,
                          const char *name, 
-                         const char *ref = 0, 
-                         const char *file = 0,
-                         const char *anchor = 0
+                         const char *ref, 
+                         const char *file,
+                         const char *anchor,
+                         bool separateIndex,
+                         bool addToNavIndex
                         );
     void addIndexItem(Definition *context,MemberDef *md,const char *title);
     void addIndexFile(const char *name);
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index f68fd40..9fb6b2c 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -294,6 +294,7 @@ NONWS [^ \t\r\n]
 BLANK [ \t\r]
 ID       "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
 LABELID  [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
+CITEID   [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
 MAILADR  [a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
 OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
 LISTITEM {BLANK}*{OPTSTARS}"-"("#")?{WS}
@@ -538,6 +539,10 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}
 			  */ 
 			 goto find_rule;
                        }
+<St_Text>({ID}".")+{ID} {
+                          g_token->name = yytext;
+                          return TK_WORD;
+  			}
 <St_Para,St_Text>"operator"/{BLANK}*"<"[a-zA-Z_0-9]+">" { // Special case: word "operator" followed by a HTML command
                                                           // avoid interpretation as "operator <"
                            g_token->name = yytext;
@@ -735,7 +740,7 @@ REFWORD   {LABELID}|{REFWORD2}|{REFWORD3}
   			 unput(*yytext);
 			 return 0;
   		       }
-<St_Cite>{LABELID}     { // label to cite
+<St_Cite>{CITEID}      { // label to cite
   			 g_token->name=yytext;
 			 return TK_WORD;
   		       }
diff --git a/src/dot.cpp b/src/dot.cpp
index 27e559f..66ec988 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -609,14 +609,11 @@ static void checkDotResult(const QCString &imgName)
 {
   if (Config_getEnum("DOT_IMAGE_FORMAT")=="png")
   {
-    //QFile f(imgName);
     FILE *f = fopen(imgName,"rb");
-    //if (f.open(IO_ReadOnly))
     if (f)
     {
       char data[4];
       if (fread(data,1,4,f)==4)
-      //if (f.readBlock(data,4)==4)
       {
         if (!(data[1]=='P' && data[2]=='N' && data[3]=='G'))
         {
diff --git a/src/doxygen.bst b/src/doxygen.bst
index 23479fa..0dd6e28 100644
--- a/src/doxygen.bst
+++ b/src/doxygen.bst
@@ -153,8 +153,8 @@ FUNCTION {output.nonnull.original}
 % closeinlinelink to be non-empty.
 FUNCTION {possibly.setup.inlinelink}
 { makeinlinelink
-   { "\rev CITEREF_" quote$ * url * quote$ * " [" * 'openinlinelink :=
-     "]" 'closeinlinelink :=
+   { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink :=
+     "</a>" 'closeinlinelink :=
      #0 'makeinlinelink := }
    'skip$
  if$ % makeinlinelink
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 240db24..85cb417 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -1333,10 +1333,10 @@ void distributeClassGroupRelations()
   {
     //printf("Checking %s\n",cd->name().data());
     // distribute the group to nested classes as well
-    if (!cd->visited && cd->partOfGroups()!=0 && cd->getInnerClasses())
+    if (!cd->visited && cd->partOfGroups()!=0 && cd->getClassSDict())
     {
       //printf("  Candidate for merging\n");
-      ClassSDict::Iterator ncli(*cd->getInnerClasses());
+      ClassSDict::Iterator ncli(*cd->getClassSDict());
       ClassDef *ncd;
       GroupDef *gd = cd->partOfGroups()->at(0);
       for (ncli.toFirst();(ncd=ncli.current());++ncli)
@@ -1441,7 +1441,7 @@ static void processTagLessClasses(ClassDef *rootCd,
 {
   //printf("%d: processTagLessClasses %s\n",count,cd->name().data());
   //printf("checking members for %s\n",cd->name().data());
-  if (cd->getInnerClasses())
+  if (cd->getClassSDict())
   {
     MemberList *ml = cd->getMemberList(MemberList::pubAttribs);
     if (ml)
@@ -1453,7 +1453,7 @@ static void processTagLessClasses(ClassDef *rootCd,
         QCString type = md->typeString();
         if (type.find("::@")!=-1) // member of tag less struct/union
         {
-          ClassSDict::Iterator it(*cd->getInnerClasses());
+          ClassSDict::Iterator it(*cd->getClassSDict());
           ClassDef *icd;
           for (it.toFirst();(icd=it.current());++it)
           {
@@ -1501,9 +1501,9 @@ static void processTagLessClasses(ClassDef *rootCd,
 
 static void findTagLessClasses(ClassDef *cd)
 {
-  if (cd->getInnerClasses())
+  if (cd->getClassSDict())
   {
-    ClassSDict::Iterator it(*cd->getInnerClasses());
+    ClassSDict::Iterator it(*cd->getClassSDict());
     ClassDef *icd;
     for (it.toFirst();(icd=it.current());++it)
     {
@@ -7626,25 +7626,17 @@ static void generateClassDocs()
     writeInstallScript();
   }
   
-  msg("Generating annotated compound index...\n");
-  writeAnnotatedIndex(*g_outputList);
+  //msg("Generating annotated compound index...\n");
+  //writeAnnotatedIndex(*g_outputList);
 
-  //if (Config_getBool("ALPHABETICAL_INDEX"))
-  //{
-    msg("Generating alphabetical compound index...\n");
-    writeAlphabeticalIndex(*g_outputList);
-  //}
+  //msg("Generating alphabetical compound index...\n");
+  //writeAlphabeticalIndex(*g_outputList);
 
-  msg("Generating hierarchical class index...\n");
-  writeHierarchicalIndex(*g_outputList);
+  //msg("Generating hierarchical class index...\n");
+  //writeHierarchicalIndex(*g_outputList);
 
-  msg("Generating member index...\n");
-  writeClassMemberIndex(*g_outputList);
-
-  if (Doxygen::exampleSDict->count()>0)
-  {
-    msg("Generating example index...\n");
-  }
+  //msg("Generating member index...\n");
+  //writeClassMemberIndex(*g_outputList);
 
   generateClassList(*Doxygen::classSDict);
   generateClassList(*Doxygen::hiddenClasses);
@@ -8516,7 +8508,7 @@ static void generateGroupDocs()
 
 static void generateNamespaceDocs()
 {
-  writeNamespaceIndex(*g_outputList);
+  //writeNamespaceIndex(*g_outputList);
   
   NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
   NamespaceDef *nd;
@@ -10749,11 +10741,11 @@ void generateOutput()
   // count the number of documented elements in the lists we have built. 
   // If the result is 0 we do not generate the lists and omit the 
   // corresponding links in the index.
-  msg("Generating index page...\n"); 
-  writeIndex(*g_outputList);
+  //msg("Generating index page...\n"); 
+  //writeIndex(*g_outputList);
 
-  msg("Generating page index...\n");
-  writePageIndex(*g_outputList);
+  //msg("Generating page index...\n");
+  //writePageIndex(*g_outputList);
   
   msg("Generating example documentation...\n");
   generateExampleDocs();
@@ -10773,23 +10765,23 @@ void generateOutput()
   msg("Generating group documentation...\n");
   generateGroupDocs();
 
-  msg("Generating group index...\n");
-  writeGroupIndex(*g_outputList);
+  //msg("Generating group index...\n");
+  //writeGroupIndex(*g_outputList);
  
   msg("Generating class documentation...\n");
   generateClassDocs();
   
-  if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
-  {
-    msg("Generating graphical class hierarchy...\n");
-    writeGraphicalClassHierarchy(*g_outputList);
-  }
+  //if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
+  //{
+  //  msg("Generating graphical class hierarchy...\n");
+  //  writeGraphicalClassHierarchy(*g_outputList);
+  //}
 
   msg("Generating namespace index...\n");
   generateNamespaceDocs();
   
-  msg("Generating namespace member index...\n");
-  writeNamespaceMemberIndex(*g_outputList);
+  //msg("Generating namespace member index...\n");
+  //writeNamespaceMemberIndex(*g_outputList);
 
   if (Config_getBool("GENERATE_LEGEND"))
   {
@@ -10803,20 +10795,20 @@ void generateOutput()
     generateDirDocs(*g_outputList);
   }
 
-  msg("Generating file index...\n");
-  writeFileIndex(*g_outputList);
+  //msg("Generating file index...\n");
+  //writeFileIndex(*g_outputList);
  
-  if (Config_getBool("SHOW_DIRECTORIES"))
-  {
-    msg("Generating directory index...\n");
-    writeDirIndex(*g_outputList);
-  }
+  //if (Config_getBool("SHOW_DIRECTORIES"))
+  //{
+  //  msg("Generating directory index...\n");
+  //  writeDirIndex(*g_outputList);
+  //}
 
-  msg("Generating example index...\n");
-  writeExampleIndex(*g_outputList);
+  //msg("Generating example index...\n");
+  //writeExampleIndex(*g_outputList);
   
-  msg("Generating file member index...\n");
-  writeFileMemberIndex(*g_outputList);
+  //msg("Generating file member index...\n");
+  //writeFileMemberIndex(*g_outputList);
 
   
   //writeDirDependencyGraph(Config_getString("HTML_OUTPUT"));
@@ -10837,6 +10829,8 @@ void generateOutput()
   //  FTVHelp::getInstance()->finalize();
   //}
 
+  writeIndexHierarchy(*g_outputList);
+
   msg("finalizing index lists...\n");
   Doxygen::indexList.finalize();
 
diff --git a/src/doxygen_bst.h b/src/doxygen_bst.h
index 7acf63e..6298713 100644
--- a/src/doxygen_bst.h
+++ b/src/doxygen_bst.h
@@ -153,8 +153,8 @@
 "% closeinlinelink to be non-empty.\n"
 "FUNCTION {possibly.setup.inlinelink}\n"
 "{ makeinlinelink\n"
-"   { \"\\rev CITEREF_\" quote$ * url * quote$ * \" [\" * 'openinlinelink :=\n"
-"     \"]\" 'closeinlinelink :=\n"
+"   { \"<a href=\" quote$ * url * quote$ * \">\" * 'openinlinelink :=\n"
+"     \"</a>\" 'closeinlinelink :=\n"
 "     #0 'makeinlinelink := }\n"
 "   'skip$\n"
 " if$ % makeinlinelink\n"
diff --git a/src/eclipsehelp.cpp b/src/eclipsehelp.cpp
index feea0ba..9f708bc 100644
--- a/src/eclipsehelp.cpp
+++ b/src/eclipsehelp.cpp
@@ -155,13 +155,17 @@ void EclipseHelp::decContentsDepth()
  * @param ref URL of the item
  * @param file Name of a file which the item is defined in (without extension)
  * @param anchor Name of an anchor of the item.
+ * @param separateIndex not used.
+ * @param addToNavIndex not used.
  */
 void EclipseHelp::addContentsItem(
     bool /* isDir */,
     const char *name,
     const char * /* ref */,
     const char *file,
-    const char *anchor) 
+    const char *anchor,
+    bool /* separateIndex */,
+    bool /* addToNavIndex */) 
 {
   // -- write the topic tag 
   closedTag();
diff --git a/src/eclipsehelp.h b/src/eclipsehelp.h
index bfc6d60..7be3502 100644
--- a/src/eclipsehelp.h
+++ b/src/eclipsehelp.h
@@ -49,8 +49,8 @@ class EclipseHelp : public IndexIntf
     virtual void finalize();
     virtual void incContentsDepth();
     virtual void decContentsDepth();
-    virtual void addContentsItem(bool isDir, const char *name, const char *ref = 0,
-                                 const char *file = 0, const char *anchor = 0);
+    virtual void addContentsItem(bool isDir, const char *name, const char *ref,
+                                 const char *file, const char *anchor,bool separateIndex,bool addToNavIndex);
     virtual void addIndexItem(Definition *context,MemberDef *md,const char *title);
     virtual void addIndexFile(const char *name);
     virtual void addImageFile(const char *name);
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 0c482d8..04ec5ae 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -261,71 +261,74 @@ void FileDef::writeIncludeFiles(OutputList &ol)
     IncludeInfo *ii;
     for (;(ii=ili.current());++ili)
     {
-      FileDef *fd=ii->fileDef;
-      bool isIDLorJava = FALSE;
-      if (fd)
+      if (!ii->indirect)
       {
-        SrcLangExt lang   = fd->getLanguage();
-        isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
-      }
-      ol.startTypewriter();
-      if (isIDLorJava) // IDL/Java include
-      {
-        ol.docify("import ");
-      }
-      else if (ii->imported) // Objective-C include
-      {
-        ol.docify("#import ");
-      }
-      else // C/C++ include
-      {
-        ol.docify("#include ");
-      }
-      if (ii->local || isIDLorJava)
-        ol.docify("\"");
-      else
-        ol.docify("<");
-      ol.disable(OutputGenerator::Html);
-      ol.docify(ii->includeName);
-      ol.enableAll();
-      ol.disableAllBut(OutputGenerator::Html);
-      
-      // Here we use the include file name as it appears in the file.
-      // we could also we the name as it is used within doxygen,
-      // then we should have used fd->docName() instead of ii->includeName
-      if (fd && fd->isLinkable())
-      {
-        ol.writeObjectLink(fd->getReference(),
-            fd->generateSourceFile() ? fd->includeName() : fd->getOutputFileBase(),
-            0,ii->includeName);
-        if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !fd->isReference()) 
+        FileDef *fd=ii->fileDef;
+        bool isIDLorJava = FALSE;
+        if (fd)
         {
-          const char *locStr = (ii->local    || isIDLorJava) ? "yes" : "no";
-          const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no";
-          Doxygen::tagFile << "    <includes id=\"" 
-                           << convertToXML(fd->getOutputFileBase()) << "\" "
-                           << "name=\"" << convertToXML(fd->name()) << "\" "
-                           << "local=\"" << locStr << "\" "
-                           << "imported=\"" << impStr << "\">"
-                           << convertToXML(ii->includeName)
-                           << "</includes>" 
-                           << endl;
+          SrcLangExt lang   = fd->getLanguage();
+          isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
         }
-      }
-      else
-      {
+        ol.startTypewriter();
+        if (isIDLorJava) // IDL/Java include
+        {
+          ol.docify("import ");
+        }
+        else if (ii->imported) // Objective-C include
+        {
+          ol.docify("#import ");
+        }
+        else // C/C++ include
+        {
+          ol.docify("#include ");
+        }
+        if (ii->local || isIDLorJava)
+          ol.docify("\"");
+        else
+          ol.docify("<");
+        ol.disable(OutputGenerator::Html);
         ol.docify(ii->includeName);
+        ol.enableAll();
+        ol.disableAllBut(OutputGenerator::Html);
+        
+        // Here we use the include file name as it appears in the file.
+        // we could also we the name as it is used within doxygen,
+        // then we should have used fd->docName() instead of ii->includeName
+        if (fd && fd->isLinkable())
+        {
+          ol.writeObjectLink(fd->getReference(),
+              fd->generateSourceFile() ? fd->includeName() : fd->getOutputFileBase(),
+              0,ii->includeName);
+          if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !fd->isReference()) 
+          {
+            const char *locStr = (ii->local    || isIDLorJava) ? "yes" : "no";
+            const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no";
+            Doxygen::tagFile << "    <includes id=\"" 
+                             << convertToXML(fd->getOutputFileBase()) << "\" "
+                             << "name=\"" << convertToXML(fd->name()) << "\" "
+                             << "local=\"" << locStr << "\" "
+                             << "imported=\"" << impStr << "\">"
+                             << convertToXML(ii->includeName)
+                             << "</includes>" 
+                             << endl;
+          }
+        }
+        else
+        {
+          ol.docify(ii->includeName);
+        }
+        
+        ol.enableAll();
+        if (ii->local || isIDLorJava)
+          ol.docify("\"");
+        else
+          ol.docify(">");
+        if (isIDLorJava) 
+          ol.docify(";");
+        ol.endTypewriter();
+        ol.lineBreak();
       }
-      
-      ol.enableAll();
-      if (ii->local || isIDLorJava)
-        ol.docify("\"");
-      else
-        ol.docify(">");
-      if (isIDLorJava) 
-        ol.docify(";");
-      ol.endTypewriter();
-      ol.lineBreak();
     }
     ol.endTextBlock();
   }
@@ -758,7 +761,7 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
           if (createSubDirs) ol.writeString("../../");
           ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
           ol.writeString("\">");
-          ol.writeString(md->localName());
+          ol.writeString(convertToHtml(md->localName()));
           ol.writeString("</a>");
         }
         ol.writeString("</td></tr>\n");
@@ -1034,7 +1037,7 @@ void FileDef::addUsingDeclaration(Definition *d)
 }
 
 void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
-                                   bool imported)
+                                   bool imported,bool indirect)
 {
   //printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
   QCString iName = fd ? fd->absFilePath().data() : incName;
@@ -1051,6 +1054,7 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
     ii->includeName = incName;
     ii->local       = local;
     ii->imported    = imported;
+    ii->indirect    = indirect;
     includeList->append(ii);
     includeDict->insert(iName,ii);
   }
@@ -1148,6 +1152,7 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
     ii->includeName = incName;
     ii->local       = local;
     ii->imported    = imported;
+    ii->indirect    = FALSE;
     includedByList->append(ii);
     includedByDict->insert(iName,ii);
   }
@@ -1647,8 +1652,8 @@ bool FileDef::isLinkableInProject() const
 
 bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const
 {
-  if (incFile==this) return TRUE;
   //printf("%s::includes(%s)\n",name().data(),incFile->name().data());
+  if (incFile==this) return TRUE;
   includedFiles->insert(absFilePath(),this);
   if (includeList)
   {
@@ -1656,12 +1661,30 @@ bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const
     IncludeInfo *ii;
     for (;(ii=ili.current());++ili)
     {
-      if (ii->fileDef && 
-          includedFiles->find(ii->fileDef->absFilePath())==0 &&
-          ii->fileDef->includes(incFile,includedFiles)) return TRUE;
+      //printf("ii=%s\n",ii->includeName.data());
+      if ((ii->fileDef && 
+           includedFiles->find(ii->fileDef->absFilePath())==0 &&
+           ii->fileDef->includes(incFile,includedFiles)
+          ) ||
+          incFile->absFilePath()==ii->includeName
+         ) return TRUE;
     }
   }
   return FALSE;
 }
 
+bool FileDef::includesByName(const QCString &fileName) const
+{
+  if (includeList)
+  {
+    QListIterator<IncludeInfo> ili(*includeList);
+    IncludeInfo *ii;
+    for (;(ii=ili.current());++ili)
+    {
+      //printf("ii=%s\n",ii->includeName.data());
+      if (fileName==ii->includeName) return TRUE;
+    }
+  }
+  return FALSE;
+}
 
diff --git a/src/filedef.h b/src/filedef.h
index 502a957..c34b633 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -42,12 +42,13 @@ class DirDef;
 
 struct IncludeInfo
 {
-  IncludeInfo() { fileDef=0; local=FALSE; }
+  IncludeInfo() { fileDef=0; local=FALSE; indirect=FALSE; }
   ~IncludeInfo() {}
   FileDef *fileDef;
   QCString includeName;
   bool local;
   bool imported;
+  bool indirect;
 };
 
 /*! \class FileDef filedef.h
@@ -155,7 +156,7 @@ class FileDef : public Definition
     bool generateSourceFile() const;
     void sortMemberLists();
 
-    void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported);
+    void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
     void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
     QList<IncludeInfo> *includeFileList() const { return includeList; }
     QList<IncludeInfo> *includedByFileList() const { return includedByList; }
@@ -168,6 +169,7 @@ class FileDef : public Definition
     void addListReferences();
     bool isDocumentationFile() const;
     bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
+    bool includesByName(const QCString &name) const;
 
     MemberList *getMemberList(MemberList::ListType lt) const;
     const QList<MemberList> &getMemberLists() const { return m_memberLists; }
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 7231ddc..9ed02c9 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -12,7 +12,7 @@
  * Documents produced by Doxygen are derivative works derived from the
  * input used in their production; they are not affected by this license.
  *
- * Contributed by Kenney Wong <kwong@ea.com>
+ * Original version contributed by Kenney Wong <kwong@ea.com>
  * Modified by Dimitri van Heesch
  *
  * Folder Tree View for offline help on browsers that do not support HTML Help.
@@ -47,279 +47,6 @@ static const char navtree_css[]=
 #include "navtree_css.h"
 ;
 
-
-#if 0
-unsigned char ftv2blank_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x01, 0x00, 0x00, 0x00, 0x01, 0x96, 0xd6, 0x11, 0x47, 0x00, 0x00, 0x00,
-  0x02, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x01, 0x01, 0x94, 0xfd, 0xae, 0x00,
-  0x00, 0x00, 0x16, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77,
-  0x61, 0x72, 0x65, 0x00, 0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20,
-  0x32, 0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00,
-  0x25, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74,
-  0x00, 0x55, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x47, 0x49, 0x46, 0x20, 0x53,
-  0x6d, 0x61, 0x72, 0x74, 0x53, 0x61, 0x76, 0x65, 0x72, 0x20, 0x56, 0x65,
-  0x72, 0x20, 0x32, 0x2e, 0x30, 0x21, 0xf8, 0xd7, 0x5e, 0x53, 0x00, 0x00,
-  0x00, 0x14, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x38, 0xc0, 0x80,
-  0x80, 0x1f, 0x30, 0xe0, 0x7f, 0x42, 0x90, 0x00, 0x02, 0x00, 0x78, 0x3c,
-  0x32, 0xcb, 0x72, 0x8f, 0x7c, 0x12, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
-  0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2doc_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x5f, 0x54, 0x71, 0x2d, 0x00, 0x00, 0x00,
-  0x15, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
-  0xff, 0xff, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0xff, 0xb3, 0xbd, 0xfb, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x74, 0x52,
-  0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, 0x16, 0x74,
-  0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00,
-  0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32, 0x2e, 0x34, 0x2e,
-  0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x76, 0x49, 0x44, 0x41,
-  0x54, 0x78, 0xda, 0x63, 0x60, 0x60, 0x60, 0x60, 0x63, 0x60, 0x60, 0x64,
-  0x00, 0x01, 0x27, 0x30, 0x62, 0x71, 0x01, 0xe2, 0x24, 0x06, 0x38, 0x60,
-  0x71, 0x00, 0xca, 0x27, 0x33, 0x30, 0x30, 0x01, 0x31, 0xa3, 0x32, 0x03,
-  0x0a, 0x70, 0x54, 0x32, 0x01, 0x53, 0x69, 0x60, 0x71, 0x27, 0x08, 0x15,
-  0x1a, 0x1a, 0xca, 0x80, 0x01, 0x5c, 0x5c, 0xc0, 0x94, 0xa2, 0x90, 0x02,
-  0x88, 0x52, 0x4b, 0x52, 0x05, 0x53, 0x69, 0xc8, 0x94, 0x18, 0x84, 0x52,
-  0x52, 0x12, 0xc5, 0x69, 0x0a, 0x36, 0xe0, 0xa4, 0xa4, 0xa4, 0x68, 0x82,
-  0xc4, 0x51, 0x82, 0x6b, 0x04, 0x71, 0x14, 0x4d, 0x61, 0x4e, 0x55, 0x04,
-  0xf2, 0x60, 0x1c, 0x27, 0x45, 0x24, 0x19, 0x90, 0x01, 0x70, 0x19, 0x67,
-  0x63, 0x20, 0x30, 0xc5, 0x6f, 0x23, 0x00, 0xf5, 0xd0, 0x11, 0xe0, 0x55,
-  0x83, 0x47, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
-  0x42, 0x60, 0x82
-};
-
-unsigned char ftv2folderclosed_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x5f, 0x54, 0x71, 0x2d, 0x00, 0x00, 0x00,
-  0x12, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
-  0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x42,
-  0xee, 0x40, 0xe1, 0x00, 0x00, 0x00, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00,
-  0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, 0x16, 0x74, 0x45, 0x58, 0x74,
-  0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x67, 0x69, 0x66,
-  0x32, 0x70, 0x6e, 0x67, 0x20, 0x32, 0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e,
-  0x47, 0x0e, 0x00, 0x00, 0x00, 0x7d, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
-  0x8d, 0x8e, 0xc1, 0x0a, 0x84, 0x30, 0x10, 0x43, 0x23, 0x8c, 0x77, 0x0f,
-  0xfb, 0x03, 0x42, 0xbd, 0x2b, 0xf8, 0x01, 0x65, 0x6d, 0xef, 0xa2, 0xcd,
-  0xff, 0xff, 0x8a, 0x33, 0xad, 0xee, 0x5a, 0xf6, 0xb0, 0x06, 0xda, 0xf0,
-  0x86, 0xa6, 0x13, 0x00, 0x88, 0x40, 0x03, 0x53, 0x02, 0x82, 0x9a, 0xd7,
-  0x51, 0x42, 0x25, 0xae, 0x7a, 0x76, 0xa0, 0xed, 0xea, 0x79, 0x79, 0x17,
-  0x49, 0x73, 0xe1, 0xf2, 0x32, 0x14, 0x8f, 0x5f, 0x49, 0xb9, 0xed, 0x23,
-  0x60, 0x20, 0xcd, 0x36, 0x66, 0xe4, 0x40, 0x4b, 0xb4, 0xdb, 0xdb, 0xe5,
-  0x16, 0xee, 0x16, 0x78, 0x20, 0xf9, 0x96, 0x15, 0x6d, 0xc2, 0x8b, 0xa2,
-  0x6e, 0xf9, 0x50, 0x64, 0xa6, 0x70, 0xb6, 0x50, 0x0a, 0xd3, 0x78, 0x86,
-  0x98, 0xa6, 0xde, 0x5d, 0x9d, 0x25, 0xcd, 0xfe, 0xdf, 0xc6, 0x03, 0xa0,
-  0x13, 0x15, 0x98, 0x60, 0xbd, 0x81, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x49,
-  0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2folderopen_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x5f, 0x54, 0x71, 0x2d, 0x00, 0x00, 0x00,
-  0x15, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
-  0xff, 0xff, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80,
-  0x00, 0x80, 0x92, 0x32, 0x8c, 0xe5, 0x00, 0x00, 0x00, 0x01, 0x74, 0x52,
-  0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, 0x16, 0x74,
-  0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00,
-  0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32, 0x2e, 0x34, 0x2e,
-  0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x7c, 0x49, 0x44, 0x41,
-  0x54, 0x78, 0xda, 0x85, 0x8d, 0x41, 0x0e, 0x82, 0x30, 0x10, 0x45, 0x5f,
-  0x08, 0xf5, 0x1e, 0x2d, 0x53, 0xd6, 0xc6, 0x18, 0xd7, 0x8d, 0x18, 0xd7,
-  0x06, 0xd2, 0x1e, 0xa0, 0xb1, 0xde, 0xff, 0x08, 0x3a, 0x20, 0x21, 0x10,
-  0xa2, 0x6f, 0xf3, 0xfe, 0xff, 0x8b, 0x19, 0x80, 0x0a, 0x6a, 0x14, 0x81,
-  0x3c, 0x06, 0x2a, 0x61, 0xc5, 0xd3, 0x43, 0x69, 0xc1, 0xb4, 0xab, 0xf9,
-  0x70, 0xac, 0x83, 0xca, 0xbb, 0xfb, 0xa4, 0x8b, 0xae, 0x26, 0x46, 0xb6,
-  0x4c, 0x0f, 0xe8, 0xc3, 0x18, 0xfa, 0xb3, 0x7d, 0xa8, 0x1a, 0xeb, 0x17,
-  0xa5, 0x46, 0x54, 0x46, 0x4e, 0x2a, 0xe2, 0xce, 0x95, 0x3d, 0xba, 0xb0,
-  0x64, 0x93, 0x85, 0x9b, 0x0b, 0x73, 0x71, 0x83, 0x75, 0xd7, 0xf2, 0xa7,
-  0x90, 0xf2, 0x20, 0x9d, 0xfb, 0x16, 0xd2, 0xeb, 0x43, 0xf9, 0xfd, 0xf2,
-  0x0d, 0xa4, 0x29, 0x14, 0xcb, 0xda, 0x47, 0xac, 0x44, 0x00, 0x00, 0x00,
-  0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2lastnode_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x4c, 0x83, 0x31, 0xd9, 0x00, 0x00, 0x00,
-  0x30, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x80, 0x80, 0x80, 0x18, 0xd3, 0xa0, 0x90, 0x00, 0x00, 0x00,
-  0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
-  0x00, 0x16, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
-  0x72, 0x65, 0x00, 0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32,
-  0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x26,
-  0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00,
-  0x55, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x47, 0x49, 0x46, 0x20, 0x53, 0x6d,
-  0x61, 0x72, 0x74, 0x53, 0x61, 0x76, 0x65, 0x72, 0x20, 0x56, 0x65, 0x72,
-  0x20, 0x32, 0x2e, 0x30, 0x69, 0x01, 0x6f, 0x3f, 0xcd, 0x06, 0x00, 0x00,
-  0x00, 0x13, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0x18, 0x30,
-  0xc0, 0x4f, 0x0c, 0x03, 0x04, 0xc8, 0x33, 0x1e, 0x00, 0x24, 0xa7, 0x00,
-  0x88, 0x10, 0xca, 0x33, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
-  0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2link_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x5f, 0x54, 0x71, 0x2d, 0x00, 0x00, 0x00,
-  0x30, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0xff,
-  0xff, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0x00, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7e, 0x9b, 0x08, 0x00, 0x00, 0x00,
-  0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
-  0x00, 0x16, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
-  0x72, 0x65, 0x00, 0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32,
-  0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x26,
-  0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00,
-  0x55, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x47, 0x49, 0x46, 0x20, 0x53, 0x6d,
-  0x61, 0x72, 0x74, 0x53, 0x61, 0x76, 0x65, 0x72, 0x20, 0x56, 0x65, 0x72,
-  0x20, 0x32, 0x2e, 0x30, 0x19, 0x02, 0xd9, 0x09, 0xe5, 0x4a, 0x00, 0x00,
-  0x00, 0x90, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x7d, 0x8c, 0xb1, 0x0a,
-  0xc2, 0x30, 0x14, 0x45, 0x6f, 0x33, 0xb4, 0x63, 0x7e, 0xa1, 0x53, 0x57,
-  0x8b, 0x7e, 0x80, 0x6e, 0xae, 0x16, 0x5a, 0xb2, 0xbe, 0x3a, 0x64, 0x35,
-  0xb8, 0x64, 0xec, 0x2f, 0x07, 0x05, 0x1d, 0x9f, 0x79, 0x8d, 0x21, 0x50,
-  0xd0, 0x03, 0xc9, 0xcd, 0xe1, 0xbe, 0x17, 0x00, 0xa8, 0x00, 0x82, 0xe0,
-  0x81, 0x66, 0x7d, 0xc0, 0x9e, 0x51, 0x70, 0x40, 0x1d, 0xcf, 0xad, 0x07,
-  0x18, 0x1b, 0x74, 0x90, 0xdb, 0x1c, 0x62, 0x0f, 0xe2, 0x20, 0xc1, 0xcc,
-  0x61, 0x3b, 0x06, 0x6a, 0xbb, 0x14, 0x3b, 0xe9, 0x68, 0xba, 0xac, 0x51,
-  0x9d, 0x24, 0xec, 0xdc, 0x4b, 0x68, 0xed, 0xd2, 0x5e, 0x1b, 0x7e, 0xfd,
-  0x92, 0xa8, 0x6d, 0x84, 0xb2, 0x28, 0x28, 0x38, 0xca, 0xd2, 0x4c, 0x46,
-  0x2d, 0x59, 0xcc, 0x38, 0x5c, 0x8b, 0xcc, 0xe3, 0xfe, 0x2b, 0x71, 0xfa,
-  0x79, 0xbc, 0x67, 0x79, 0x85, 0x07, 0x54, 0x69, 0xde, 0xde, 0x2f, 0xf8,
-  0xcf, 0x07, 0x71, 0x95, 0x2b, 0xa1, 0x10, 0x78, 0xd0, 0xff, 0x00, 0x00,
-  0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2mlastnode_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x02, 0x03, 0x00, 0x00, 0x01, 0xc3, 0xc3, 0xc4, 0x79, 0x00, 0x00, 0x00,
-  0x09, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0x00,
-  0x00, 0x00, 0x3c, 0x5e, 0xbb, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x74, 0x52,
-  0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, 0x16, 0x74,
-  0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00,
-  0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32, 0x2e, 0x34, 0x2e,
-  0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x23, 0x49, 0x44, 0x41,
-  0x54, 0x78, 0xda, 0x63, 0x60, 0x20, 0x0b, 0x08, 0x08, 0x20, 0x10, 0x0a,
-  0x60, 0x84, 0x11, 0x8c, 0xa1, 0xa1, 0x20, 0x06, 0x90, 0xc9, 0xa8, 0xb5,
-  0x50, 0x10, 0xca, 0x02, 0x89, 0x61, 0x01, 0x00, 0x6d, 0x17, 0x02, 0xba,
-  0xc0, 0xdc, 0x69, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
-  0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2mnode_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x4c, 0x83, 0x31, 0xd9, 0x00, 0x00, 0x00,
-  0x24, 0x50, 0x4c, 0x54, 0x45, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x80, 0x80, 0x80, 0x53, 0xbe, 0x1e, 0x99, 0x00, 0x00, 0x00,
-  0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
-  0x00, 0x16, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
-  0x72, 0x65, 0x00, 0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32,
-  0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x2a,
-  0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0xa0, 0x2e, 0xe0, 0x06,
-  0x42, 0x74, 0x02, 0xa7, 0x52, 0x54, 0x06, 0xf7, 0x6e, 0x20, 0x80, 0xf1,
-  0xc1, 0x62, 0xdc, 0x4c, 0x4a, 0x4a, 0xdc, 0xdc, 0xdc, 0xc8, 0x22, 0x30,
-  0x35, 0x98, 0xda, 0xd1, 0x19, 0x00, 0xb7, 0x79, 0x07, 0x27, 0xaa, 0xf7,
-  0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
-  0x60, 0x82
-};
-
-unsigned char ftv2node_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x4c, 0x83, 0x31, 0xd9, 0x00, 0x00, 0x00,
-  0x30, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x80, 0x80, 0x80, 0x18, 0xd3, 0xa0, 0x90, 0x00, 0x00, 0x00,
-  0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
-  0x00, 0x16, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
-  0x72, 0x65, 0x00, 0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32,
-  0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x26,
-  0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00,
-  0x55, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x47, 0x49, 0x46, 0x20, 0x53, 0x6d,
-  0x61, 0x72, 0x74, 0x53, 0x61, 0x76, 0x65, 0x72, 0x20, 0x56, 0x65, 0x72,
-  0x20, 0x32, 0x2e, 0x30, 0x69, 0x01, 0x6f, 0x3f, 0xcd, 0x06, 0x00, 0x00,
-  0x00, 0x15, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0x18, 0x30,
-  0xc0, 0x4f, 0x0c, 0x03, 0x04, 0x88, 0x56, 0x8c, 0xc2, 0x00, 0x00, 0x2e,
-  0x52, 0x00, 0xe2, 0xfa, 0x45, 0x3a, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x49,
-  0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2plastnode_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x02, 0x03, 0x00, 0x00, 0x01, 0xc3, 0xc3, 0xc4, 0x79, 0x00, 0x00, 0x00,
-  0x09, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0x00,
-  0x00, 0x00, 0x3c, 0x5e, 0xbb, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x74, 0x52,
-  0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, 0x16, 0x74,
-  0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00,
-  0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32, 0x2e, 0x34, 0x2e,
-  0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x49, 0x44, 0x41,
-  0x54, 0x78, 0xda, 0x63, 0x60, 0x20, 0x0b, 0x08, 0x08, 0x30, 0x08, 0x81,
-  0x11, 0x90, 0x81, 0x02, 0x18, 0x61, 0x04, 0x63, 0x68, 0x28, 0x90, 0x60,
-  0x02, 0x32, 0x19, 0xb5, 0x16, 0x0a, 0x42, 0x59, 0x20, 0x31, 0x2c, 0x00,
-  0x00, 0x6e, 0xc1, 0x02, 0xc2, 0xe5, 0xed, 0x75, 0xa7, 0x00, 0x00, 0x00,
-  0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2pnode_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x4c, 0x83, 0x31, 0xd9, 0x00, 0x00, 0x00,
-  0x24, 0x50, 0x4c, 0x54, 0x45, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x80, 0x80, 0x80, 0x53, 0xbe, 0x1e, 0x99, 0x00, 0x00, 0x00,
-  0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
-  0x00, 0x16, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
-  0x72, 0x65, 0x00, 0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32,
-  0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x30,
-  0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0xa0, 0x2e, 0xe0, 0x06,
-  0x42, 0x06, 0x6e, 0x26, 0x38, 0x01, 0xe2, 0xe2, 0x54, 0x8a, 0xca, 0xe0,
-  0xde, 0x0d, 0x04, 0x10, 0x3e, 0x13, 0x44, 0x8c, 0x9b, 0x49, 0x49, 0x89,
-  0x9b, 0x9b, 0x1b, 0x59, 0x04, 0xa6, 0x06, 0x53, 0x3b, 0x3a, 0x03, 0x00,
-  0xba, 0x6b, 0x07, 0x2f, 0xaa, 0xcb, 0x1f, 0x6f, 0x00, 0x00, 0x00, 0x00,
-  0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-
-unsigned char ftv2vertline_png[] = {
-  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
-  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
-  0x04, 0x03, 0x00, 0x00, 0x01, 0x4c, 0x83, 0x31, 0xd9, 0x00, 0x00, 0x00,
-  0x30, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x80, 0x80, 0x80, 0x18, 0xd3, 0xa0, 0x90, 0x00, 0x00, 0x00,
-  0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
-  0x00, 0x16, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
-  0x72, 0x65, 0x00, 0x67, 0x69, 0x66, 0x32, 0x70, 0x6e, 0x67, 0x20, 0x32,
-  0x2e, 0x34, 0x2e, 0x32, 0xa3, 0x5e, 0x47, 0x0e, 0x00, 0x00, 0x00, 0x26,
-  0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00,
-  0x55, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x47, 0x49, 0x46, 0x20, 0x53, 0x6d,
-  0x61, 0x72, 0x74, 0x53, 0x61, 0x76, 0x65, 0x72, 0x20, 0x56, 0x65, 0x72,
-  0x20, 0x32, 0x2e, 0x30, 0x69, 0x01, 0x6f, 0x3f, 0xcd, 0x06, 0x00, 0x00,
-  0x00, 0x0f, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x60, 0x18, 0x30,
-  0xc0, 0x4f, 0x5b, 0x06, 0x00, 0x21, 0x14, 0x00, 0xa6, 0xe5, 0x3c, 0xe8,
-  0x3a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
-  0x82
-};
-#endif
-
-
 static unsigned char blank_png[352] =
 {
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -728,19 +455,24 @@ static ColoredImgDataItem ftv_image_data[] =
   { 0,                       0,   0, 0,                0                  }
 };
 
+static int folderId=1;
+
 struct FTVNode
 {
-  FTVNode(bool dir,const char *r,const char *f,const char *a,const char *n)
-    : isLast(TRUE), isDir(dir),ref(r),file(f),anchor(a),name(n), 
-      parent(0) { children.setAutoDelete(TRUE); }
+  FTVNode(bool dir,const char *r,const char *f,const char *a,const char *n,bool sepIndex,bool navIndex)
+    : isLast(TRUE), isDir(dir),ref(r),file(f),anchor(a),name(n), index(0),
+      parent(0), separateIndex(sepIndex), addToNavIndex(navIndex) { children.setAutoDelete(TRUE); }
   bool isLast;
   bool isDir;
   QCString ref;
   QCString file;
   QCString anchor;
   QCString name;
+  int index;
   QList<FTVNode> children;
   FTVNode *parent;
+  bool separateIndex;
+  bool addToNavIndex;
 };
 
 
@@ -759,6 +491,7 @@ FTVHelp::FTVHelp(bool TLI)
   m_topLevelIndex = TLI;
 }
 
+/*! Destroys the ftv help object. */
 FTVHelp::~FTVHelp()
 {
   delete[] m_indentNodes;
@@ -816,21 +549,27 @@ void FTVHelp::decContentsDepth()
  *  \param file the file containing the definition of the item
  *  \param anchor the anchor within the file.
  *  \param name the name of the item.
+ *  \param separateIndex put the entries in a separate index file
+ *  \param addToNavIndex add this entry to the quick navigation index
  */
 void FTVHelp::addContentsItem(bool isDir,
                               const char *name,
                               const char *ref,
                               const char *file,
-                              const char *anchor
+                              const char *anchor,
+                              bool separateIndex,
+                              bool addToNavIndex
                               )
 {
+  //printf("addContentsItem(%s,%s,%s,%s)\n",name,ref,file,anchor);
   QList<FTVNode> *nl = &m_indentNodes[m_indent];
-  FTVNode *newNode = new FTVNode(isDir,ref,file,anchor,name);
+  FTVNode *newNode = new FTVNode(isDir,ref,file,anchor,name,separateIndex,addToNavIndex);
   if (!nl->isEmpty())
   {
     nl->getLast()->isLast=FALSE;
   }
   nl->append(newNode);
+  newNode->index = nl->count()-1;
   if (m_indent>0)
   {
     QList<FTVNode> *pnl = &m_indentNodes[m_indent-1];
@@ -839,7 +578,6 @@ void FTVHelp::addContentsItem(bool isDir,
   
 }
 
-static int folderId=1;
 
 void FTVHelp::generateIndent(FTextStream &t, FTVNode *n,int level)
 {
@@ -969,7 +707,33 @@ void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level)
   }
 }
 
-bool FTVHelp::generateJSTree(FTextStream &t, const QList<FTVNode> &nl,int level,bool &first)
+static void writePathToNode(FTextStream &tidx,FTVNode *leaf,FTVNode *n)
+{
+  if (n->parent)
+  {
+    writePathToNode(tidx,leaf,n->parent);
+  }
+  tidx << n->index;
+  if (leaf!=n) tidx << ",";
+}
+
+bool childOfHierarchy(const FTVNode *n)
+{
+  if (n==0) return FALSE;
+  if (n->file=="hierarchy") 
+    return TRUE;
+  else 
+    return childOfHierarchy(n->parent);
+}
+
+bool dupOfParent(const FTVNode *n)
+{
+  if (n->parent==0) return FALSE;
+  if (n->file==n->parent->file) return TRUE;
+  return FALSE;
+}
+
+bool FTVHelp::generateJSTree(FTextStream &tidx,FTextStream &t, const QList<FTVNode> &nl,int level,bool &first)
 {
   QCString indentStr;
   indentStr.fill(' ',level*2);
@@ -989,45 +753,59 @@ bool FTVHelp::generateJSTree(FTextStream &t, const QList<FTVNode> &nl,int level,
     }
     found=TRUE;
 
-    bool firstChild=TRUE;
-    t << indentStr << "  [ ";
-    generateJSLink(t,n);
-    bool emptySection = !generateJSTree(t,n->children,level+1,firstChild);
-    if (emptySection)
-      t << "null ]";
-    else
-      t << endl << indentStr << "  ] ]"; 
-  }
-  return found;
-}
-
-
-#if 0
-void FTVHelp::generateTreeViewImages()
-{
-  static bool done=FALSE;
-  if (done) return;
-  done=TRUE;
+    //if (!n->file.isEmpty() && !childOfHierarchy(n->parent))
+    if (n->addToNavIndex)
+    {
+      tidx << "," << endl << "\"" << n->file << Doxygen::htmlFileExtension;
+      if (!n->anchor.isEmpty()) tidx << "#" << n->anchor;
+      tidx << "\":[";
+      writePathToNode(tidx,n,n);
+      tidx << "]";
+    }
 
-  // Generate tree view images
-  FTVImageInfo *p = image_info;
-  while (p->name)
-  {
-    QCString fileName=Config_getString("HTML_OUTPUT")+"/"+p->name;
-    QFile f(fileName);
-    if (f.open(IO_WriteOnly)) 
+    if (n->separateIndex) // store items in a separate file for dynamic loading
     {
-      f.writeBlock((char *)p->data,p->len);
+      bool firstChild=TRUE;
+      t << indentStr << "  [ ";
+      generateJSLink(t,n);
+      if (n->children.count()>0) // write children to separate file for dynamic loading
+      {
+        QCString fileId = n->file;
+        if (dupOfParent(n)) fileId+="_dup";
+        QFile f(Config_getString("HTML_OUTPUT")+"/"+fileId+".js");
+        if (f.open(IO_WriteOnly))
+        {
+          FTextStream tt(&f);
+          QCString varId = fileId;
+          int i=fileId.findRev('/');
+          if (i>=0) varId = varId.mid(i+1);
+          tt << "var " << varId << " =" << endl;
+          generateJSTree(tidx,tt,n->children,1,firstChild);
+          tt << endl << "];"; 
+        }
+        // write file name without extension as marker
+        t << "\"" << fileId << "\" ]";
+        //if (n->file!="hierarchy") addFilesToIndex(tidx,n);
+      }
+      else // no children
+      {
+        t << "null ]";
+      }
     }
-    else
+    else // show items in this file
     {
-      fprintf(stderr,"warning: Cannot open file %s for writing\n",fileName.data());
+      bool firstChild=TRUE;
+      t << indentStr << "  [ ";
+      generateJSLink(t,n);
+      bool emptySection = !generateJSTree(tidx,t,n->children,level+1,firstChild);
+      if (emptySection)
+        t << "null ]";
+      else
+        t << endl << indentStr << "  ] ]"; 
     }
-    f.close();
-    p++;
   }
-} 
-#endif
+  return found;
+}
 
 // new style images
 void FTVHelp::generateTreeViewImages()
@@ -1041,9 +819,14 @@ void FTVHelp::generateTreeViewScripts()
 {
   // generate navtree.js
   {
-    QFile f(Config_getString("HTML_OUTPUT")+"/navtree.js");
-    if (f.open(IO_WriteOnly))
+    QCString htmlOutput = Config_getString("HTML_OUTPUT");
+    QFile f(htmlOutput+"/navtree.js");
+    QFile fidx(htmlOutput+"/navtreeindex.js");
+    if (f.open(IO_WriteOnly) && fidx.open(IO_WriteOnly))
     {
+      FTextStream tidx(&fidx);
+      tidx << "var NAVTREEINDEX =" << endl;
+      tidx << "{" << endl;
       FTextStream t(&f);
       t << "var NAVTREE =" << endl;
       t << "[" << endl;
@@ -1060,13 +843,17 @@ void FTVHelp::generateTreeViewScripts()
       }
       t << "\"index" << Doxygen::htmlFileExtension << "\", ";
 
+      tidx << "\"index" << Doxygen::htmlFileExtension << "\":[]";
+
       bool first=TRUE;
-      generateJSTree(t,m_indentNodes[0],1,first);
+      generateJSTree(tidx,t,m_indentNodes[0],1,first);
       if (first) t << "]";
 
       t << endl << "  ] ]" << endl;
       t << "];" << endl;
       t << endl << navtree_script;
+
+      tidx << endl << "};" << endl;
     }
   }
   // generate resize.js
@@ -1078,17 +865,6 @@ void FTVHelp::generateTreeViewScripts()
       t << resize_script;
     }
   }
-#if 0
-  // generate jquery.js
-  {
-    QFile f(Config_getString("HTML_OUTPUT")+"/jquery.js");
-    if (f.open(IO_WriteOnly))
-    {
-      FTextStream t(&f);
-      t << jquery_script1 << jquery_script2 << jquery_script3;
-    }
-  }
-#endif
   // generate navtree.css
   {
     QFile f(Config_getString("HTML_OUTPUT")+"/navtree.css");
@@ -1182,171 +958,5 @@ void FTVHelp::generateTreeView()
 {
   generateTreeViewImages();
   generateTreeViewScripts();
-#if 0
-  QCString fileName;
-  QFile f;
-  static bool searchEngine = Config_getBool("SEARCHENGINE");
-  static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
-  
-  fileName=Config_getString("HTML_OUTPUT")+"/index"+Doxygen::htmlFileExtension;
-  f.setName(fileName);
-  if (!f.open(IO_WriteOnly))
-  {
-    err("Cannot open file %s for writing!\n",fileName.data());
-    return;
-  }
-  else
-  {
-    FTextStream t(&f);
-    //t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n";
-    t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n";
-    t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n";
-    t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n";
-    t << "<title>"; 
-    if (Config_getString("PROJECT_NAME").isEmpty())
-    {
-      t << "Doxygen Documentation";
-    }
-    else
-    {
-      t << Config_getString("PROJECT_NAME");
-    }
-    t << "</title>\n</head>" << endl;
-    t << "<frameset cols=\"" << Config_getInt("TREEVIEW_WIDTH") << ",*\">" << endl;
-    t << "  <frame src=\"tree" << Doxygen::htmlFileExtension << "\" name=\"treefrm\"/>" << endl;
-    t << "  <frame src=\"main" << Doxygen::htmlFileExtension << "\" name=\"basefrm\"/>" << endl;
-    t << "  <noframes>" << endl;
-    t << "    <body>" << endl;
-    t << "    <a href=\"main" << Doxygen::htmlFileExtension << "\">Frames are disabled. Click here to go to the main page.</a>" << endl;
-    t << "    </body>" << endl;
-    t << "  </noframes>" << endl;
-    t << "</frameset>" << endl;
-    t << "</html>" << endl;
-    f.close();
-  }
-
-  // Generate tree view
-  fileName=Config_getString("HTML_OUTPUT")+"/tree"+Doxygen::htmlFileExtension;
-  f.setName(fileName);
-  if (!f.open(IO_WriteOnly))
-  {
-    err("Cannot open file %s for writing!\n",fileName.data());
-    return;
-  }
-  else
-  {
-    FTextStream t(&f);
-
-    //if (searchEngine)
-    //{
-    //  t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl;
-    //}
-    t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
-    t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
-    t << "  <head>\n";
-    t << "    <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n";
-    t << "    <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n";
-    t << "    <meta http-equiv=\"Content-Language\" content=\"en\" />\n";
-    if (searchEngine)
-    {
-      t << "    <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>" << endl;
-      t << "    <script type=\"text/javaScript\" src=\"search/search.js\"></script>" << endl;
-    }
-    t << "    <link rel=\"stylesheet\" href=\"";
-    QCString cssname=Config_getString("HTML_STYLESHEET");
-    if (cssname.isEmpty())
-    {
-      t << "doxygen.css";
-    }
-    else
-    {
-      QFileInfo cssfi(cssname);
-      if (!cssfi.exists())
-      {
-        err("Error: user specified HTML style sheet file does not exist!\n");
-      }
-      t << cssfi.fileName();
-    }
-    t << "\"/>" << endl;
-    t << "    <title>TreeView</title>\n";
-    generateScript(t);
-    t << "  </head>\n";
-    t << "\n";
-    t << "  <body class=\"ftvtree\"";
-    if (searchEngine && !serverBasedSearch)
-    {
-      t << " onload='searchBox.OnSelectItem(0);'";
-    }
-    t << ">\n";
-    if (searchEngine)
-    {
-      t << "      <script type=\"text/javascript\"><!--\n";
-      t << "      var searchBox = new SearchBox(\"searchBox\", \"search\", true, '" 
-        << theTranslator->trSearch() << "');\n";
-      t << "      --></script>\n";
-      if (!serverBasedSearch)
-      {
-        t << "      <div class=\"tabsearch\">\n";
-        t << "        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
-        t << "          <span class=\"left\">\n";
-        t << "            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
-          << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n";
-        t << "            <input type=\"text\" id=\"MSearchField\" value=\"" 
-          << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
-        t << "                   onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
-        t << "                   onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
-        t << "                   onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
-        t << "          </span><span class=\"right\">\n";
-        t << "            <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n";
-        t << "                 onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
-        t << "                 onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
-        t << "                 alt=\"\"/>\n";
-        t << "          </span>\n";
-        t << "        </div>\n";
-        t << "      </div>\n";
-        HtmlGenerator::writeSearchFooter(t,QCString());
-      }
-      else
-      {
-        t << "      <div class=\"tabsearch\">\n";
-        t << "        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
-        t << "          <span class=\"left\">\n";
-        t << "            <form id=\"FSearchBox\" action=\"search.php\" method=\"get\" target=\"basefrm\">\n";
-        t << "              <img id=\"MSearchSelect\" src=\"search/mag.png\" alt=\"\"/>\n";
-        t << "              <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
-          << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
-        t << "                     onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
-        t << "                     onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
-        t << "            </form>\n";
-        t << "          </span><span class=\"right\"></span>\n";
-        t << "        </div>\n";
-        t << "      </div>\n";
-      }
-    }
-    t << "    <div class=\"directory\">\n";
-    t << "      <h3 class=\"swap\"><span>";
-    QCString &projName = Config_getString("PROJECT_NAME");
-    if (projName.isEmpty())
-    {
-      t << "Root";
-    }
-    else
-    {
-      t << projName;
-    }
-    t << "</span></h3>\n";
-    t << "      <div style=\"display: block;\">\n";
-
-    generateTree(t,m_indentNodes[0],0);
-
-    t << "      </div>\n";
-    t << "    </div>\n";
-  
-    t << "  </body>\n";
-    t << "</html>\n";
-  
-    f.close();
-  }
-#endif
 }
 
diff --git a/src/ftvhelp.h b/src/ftvhelp.h
index 5ec0d0d..78e8b7b 100644
--- a/src/ftvhelp.h
+++ b/src/ftvhelp.h
@@ -48,7 +48,9 @@ class FTVHelp : public IndexIntf
                          const char *name,
                          const char *ref,
                          const char *file,
-                         const char *anchor);
+                         const char *anchor,
+                         bool separateIndex=FALSE,
+                         bool addToNavIndex=FALSE);
     //void addIndexItem(const char *, const char *, 
     //                  const char *, const char *,
     //                  const char *, const MemberDef *) {}
@@ -63,7 +65,8 @@ class FTVHelp : public IndexIntf
   private:
     void generateScript(FTextStream &t);
     void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level);
-    bool generateJSTree(FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
+    bool generateJSTree(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
+    //bool generateJSTreeTopLevel(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
     void generateIndent(FTextStream &t,FTVNode *n,int level);
     void generateLink(FTextStream &t,FTVNode *n);
     void generateJSLink(FTextStream &t,FTVNode *n);
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 12de564..1c4567e 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -887,7 +887,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
 {
   //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   ol.pushGeneratorState();
-  startFile(ol,getOutputFileBase(),name(),title);
+  startFile(ol,getOutputFileBase(),name(),title,HLI_None);
 
   ol.startHeaderSection();
   writeSummaryLinks(ol);
@@ -1105,7 +1105,7 @@ void GroupDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
         if (createSubDirs) ol.writeString("../../");
         ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
         ol.writeString("\">");
-        ol.writeString(md->localName());
+        ol.writeString(convertToHtml(md->localName()));
         ol.writeString("</a>");
       }
       ol.writeString("</td></tr>\n");
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 2c5ffb7..8795bb4 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -1657,7 +1657,7 @@ void HtmlDocVisitor::startLink(const QCString &ref,const QCString &file,
   if (!file.isEmpty()) m_t << file << Doxygen::htmlFileExtension;
   if (!anchor.isEmpty()) m_t << "#" << anchor;
   m_t << "\"";
-  if (!tooltip.isEmpty()) m_t << " title=\"" << tooltip << "\"";
+  if (!tooltip.isEmpty()) m_t << " title=\"" << substitute(tooltip,"\"","&quot;") << "\"";
   m_t << ">";
 }
 
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index c9ff1f0..0e3a158 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -81,6 +81,10 @@ static const char search_jquery_script3[]=
 #include "jquery_ui_js.h"
 ;
 
+static const char search_jquery_script4[]=
+#include "jquery_fx_js.h"
+;
+
 static const char svgpan_script[]=
 #include "svgpan_js.h"
 ;
@@ -1095,6 +1099,10 @@ void HtmlGenerator::init()
     {
       FTextStream t(&f);
       t << search_jquery_script1 << search_jquery_script2 << search_jquery_script3;
+      if (Config_getBool("GENERATE_TREEVIEW"))
+      {
+        t << search_jquery_script4;
+      }
     }
   }
 
@@ -1178,7 +1186,13 @@ void HtmlGenerator::writeSearchData(const char *dir)
   if (f.open(IO_WriteOnly))
   {
     FTextStream t(&f);
-    t << replaceColorMarkers(search_styleSheet);
+    QCString searchCss = replaceColorMarkers(search_styleSheet);
+    if (Config_getBool("DISABLE_INDEX"))
+    {
+      // move up the search box if there are no tabs
+      searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+    }
+    t << searchCss;
   }
   Doxygen::indexList.addStyleSheetFile("search/search.css");
 }
@@ -1260,24 +1274,34 @@ void HtmlGenerator::startFile(const char *name,const char *,
   m_sectionCount=0;
 }
 
-void HtmlGenerator::writeSearchFooter(FTextStream &t,const QCString &relPath)
+void HtmlGenerator::writeSearchInfo(FTextStream &t,const QCString &relPath)
+{
+  static bool searchEngine      = Config_getBool("SEARCHENGINE");
+  static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
+  if (searchEngine && !serverBasedSearch)
+  {
+    (void)relPath;
+    t << "<!-- window showing the filter options -->\n";
+    t << "<div id=\"MSearchSelectWindow\"\n";
+    t << "     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
+    t << "     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
+    t << "     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
+    writeSearchCategories(t);
+    t << "</div>\n";
+    t << "\n";
+    t << "<!-- iframe showing the search results (closed by default) -->\n";
+    t << "<div id=\"MSearchResultsWindow\">\n";
+    t << "<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n";
+    t << "        name=\"MSearchResults\" id=\"MSearchResults\">\n";
+    t << "</iframe>\n";
+    t << "</div>\n";
+    t << "\n";
+  }
+}
+
+void HtmlGenerator::writeSearchInfo()
 {
-  (void)relPath;
-  t << "<!-- window showing the filter options -->\n";
-  t << "<div id=\"MSearchSelectWindow\"\n";
-  t << "     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
-  t << "     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
-  t << "     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
-  writeSearchCategories(t);
-  t << "</div>\n";
-  t << "\n";
-  t << "<!-- iframe showing the search results (closed by default) -->\n";
-  t << "<div id=\"MSearchResultsWindow\">\n";
-  t << "<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n";
-  t << "        name=\"MSearchResults\" id=\"MSearchResults\">\n";
-  t << "</iframe>\n";
-  t << "</div>\n";
-  t << "\n";
+  writeSearchInfo(t,relPath);
 }
 
 
@@ -1312,13 +1336,6 @@ void HtmlGenerator::writeLogo()
 
 void HtmlGenerator::writePageFooter(FTextStream &t,const QCString &lastTitle,const QCString &relPath)
 {
-  static bool searchEngine      = Config_getBool("SEARCHENGINE");
-  static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
-  if (searchEngine /*&& !generateTreeView*/ && !serverBasedSearch)
-  {
-    HtmlGenerator::writeSearchFooter(t,relPath);
-  }
-
   t << substituteHtmlKeywords(g_footer,convertToHtml(lastTitle),relPath);
 }
 
@@ -2423,15 +2440,10 @@ static void startQuickIndexItem(FTextStream &t,const char *l,
                                 bool hl,bool /*compact*/,
                                 const QCString &relPath)
 {
-  //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
   t << "      <li"; 
   if (hl) 
   {
     t << " class=\"current\"";
-    //if (generateTreeView) 
-    //{
-    //  t << " onmouseover=\"return navShow('" << l << "')\"";
-    //}
   }
   t << "><a ";
   t << "href=\"" << relPath << l << "\">";
@@ -2459,12 +2471,15 @@ static bool quickLinkVisible(LayoutNavEntry::Kind kind)
     case LayoutNavEntry::Pages:            return indexedPages>0;
     case LayoutNavEntry::Modules:          return documentedGroups>0;
     case LayoutNavEntry::Namespaces:       return documentedNamespaces>0;
+    case LayoutNavEntry::NamespaceList:    return documentedNamespaces>0;
     case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0;
     case LayoutNavEntry::Classes:          return annotatedClasses>0;
-    case LayoutNavEntry::ClassAnnotated:   return annotatedClasses>0; 
+    case LayoutNavEntry::ClassList:        return annotatedClasses>0; 
+    case LayoutNavEntry::ClassIndex:       return annotatedClasses>0; 
     case LayoutNavEntry::ClassHierarchy:   return hierarchyClasses>0;
     case LayoutNavEntry::ClassMembers:     return documentedClassMembers[CMHL_All]>0;
     case LayoutNavEntry::Files:            return documentedHtmlFiles>0;
+    case LayoutNavEntry::FileList:         return documentedHtmlFiles>0;
     case LayoutNavEntry::FileGlobals:      return documentedFileMembers[FMHL_All]>0;
     case LayoutNavEntry::Dirs:             return documentedDirs>0;
     case LayoutNavEntry::Examples:         return Doxygen::exampleSDict->count()>0;
@@ -2494,11 +2509,16 @@ static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,Layout
         {
           url+=Doxygen::htmlFileExtension;
         }
-        startQuickIndexItem(t,url,FALSE,FALSE,relPath);
+        t << "<li"; 
+        t << "><a ";
+        t << "href=\"" << relPath << url << "\">";
+        t << "<span>";
         t << fixSpaces(entry->title());
+        t << "</span>";
+        t << "</a>\n";
         // recursive into child list
         renderQuickLinksAsTree(t,relPath,entry);
-        endQuickIndexItem(t);
+        t << "</li>";
       }
     }
     endQuickIndexList(t,FALSE);
@@ -2548,7 +2568,7 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
           endQuickIndexItem(t);
         }
       }
-      if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry())
+      if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry()) // first row
       {
         //static bool generateTreeView  = Config_getBool("GENERATE_TREEVIEW");
         static bool searchEngine      = Config_getBool("SEARCHENGINE");
@@ -2584,18 +2604,6 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
         endQuickIndexList(t,TRUE);
       }
     }
-#if 0
-    if (generateTreeView)
-    {
-      // add empty rows for the dynamic menus (max 4 levels)
-      t << "  <div id=\"navrow2\" class=\"tabs2\">\n";
-      t << "  </div>\n";
-      t << "  <div id=\"navrow3\" class=\"tabs3\">\n";
-      t << "  </div>\n";
-      t << "  <div id=\"navrow4\" class=\"tabs3\">\n";
-      t << "  </div>\n";
-    }
-#endif
   }
 }
 
@@ -2604,25 +2612,29 @@ static void writeDefaultQuickLinks(FTextStream &t,bool compact,
 {
   LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry();
   LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1;
+  LayoutNavEntry::Kind altKind = (LayoutNavEntry::Kind)-1; // fall back for the old layout file
   bool highlightParent=FALSE;
   switch (hli) // map HLI enums to LayoutNavEntry::Kind enums
   {
     case HLI_Main:             kind = LayoutNavEntry::MainPage;         break;
     case HLI_Modules:          kind = LayoutNavEntry::Modules;          break;
     case HLI_Directories:      kind = LayoutNavEntry::Dirs;             break;
-    case HLI_Namespaces:       kind = LayoutNavEntry::Namespaces;       break;
+    case HLI_Namespaces:       kind = LayoutNavEntry::NamespaceList;    altKind = LayoutNavEntry::Namespaces;  break;
     case HLI_Hierarchy:        kind = LayoutNavEntry::ClassHierarchy;   break;
-    case HLI_Classes:          kind = LayoutNavEntry::Classes;          break;
-    case HLI_Annotated:        kind = LayoutNavEntry::ClassAnnotated;   break;
-    case HLI_Files:            kind = LayoutNavEntry::Files;            break;
+    case HLI_Classes:          kind = LayoutNavEntry::ClassIndex;       altKind = LayoutNavEntry::Classes;     break;
+    case HLI_Annotated:        kind = LayoutNavEntry::ClassList;        altKind = LayoutNavEntry::Classes;     break;
+    case HLI_Files:            kind = LayoutNavEntry::FileList;         altKind = LayoutNavEntry::Files;       break;
     case HLI_NamespaceMembers: kind = LayoutNavEntry::NamespaceMembers; break;
     case HLI_Functions:        kind = LayoutNavEntry::ClassMembers;     break;
     case HLI_Globals:          kind = LayoutNavEntry::FileGlobals;      break;
     case HLI_Pages:            kind = LayoutNavEntry::Pages;            break;
     case HLI_Examples:         kind = LayoutNavEntry::Examples;         break;
-    case HLI_ClassVisible:     kind = LayoutNavEntry::Classes;    highlightParent = TRUE; break;
-    case HLI_NamespaceVisible: kind = LayoutNavEntry::Namespaces; highlightParent = TRUE; break;
-    case HLI_FileVisible:      kind = LayoutNavEntry::Files;      highlightParent = TRUE; break;
+    case HLI_ClassVisible:     kind = LayoutNavEntry::ClassList;        altKind = LayoutNavEntry::Classes;          
+                               highlightParent = TRUE; break;
+    case HLI_NamespaceVisible: kind = LayoutNavEntry::NamespaceList;    altKind = LayoutNavEntry::Namespaces;       
+                               highlightParent = TRUE; break;
+    case HLI_FileVisible:      kind = LayoutNavEntry::FileList;         altKind = LayoutNavEntry::Files;            
+                               highlightParent = TRUE; break;
     case HLI_None:   break;
     case HLI_Search: break;
   }
@@ -2631,6 +2643,7 @@ static void writeDefaultQuickLinks(FTextStream &t,bool compact,
   {
     // find highlighted index item
     LayoutNavEntry *hlEntry = root->find(kind);
+    if (!hlEntry && altKind!=(LayoutNavEntry::Kind)-1) { hlEntry=root->find(altKind); kind=altKind; }
     if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index...
     {
       highlightParent=TRUE;
@@ -2784,70 +2797,13 @@ void HtmlGenerator::writeSearchPage()
       t << "</div>" << endl;
     }
 
-    // OPENSEARCH_PROVIDER {
-#if 0
-    t << "\n<script language=\"php\">\n\n";
-    t << "function search_results()\n";
-    t << "{\n";
-    t << "  return \"" << theTranslator->trSearchResultsTitle() << "\";\n";
-    t << "}\n";
-    t << "\n";
-    t << "function matches_text($num)\n";
-    t << "{\n";
-    t << "  if ($num==0)\n";
-    t << "  {\n";
-    t << "    return \"" << theTranslator->trSearchResults(0) << "\";\n";
-    t << "  }\n";
-    t << "  else if ($num==1)\n";
-    t << "  {\n";
-    t << "    return \"" << theTranslator->trSearchResults(1) << "\";\n";
-    t << "  }\n";
-    t << "  else // $num>1\n";
-    t << "  {\n";
-    t << "    return \"" << theTranslator->trSearchResults(2) << "\";\n";
-    t << "  }\n";
-    t << "}\n";
-    t << "\n";
-    t << "function report_matches()\n";
-    t << "{\n";
-    t << "  return \"" << theTranslator->trSearchMatches() << " \";\n";
-    t << "}\n";
-    t << "function end_form($value)\n";
-    t << "{\n";
-    t << "  echo \"";
-    if (!Config_getBool("DISABLE_INDEX")) 
-    { 
-      t << "              <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" "
-        << "onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" "
-        << "onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n"
-        << "            </form>\\n"
-        << "          </div><div class=\\\"right\\\"></div>\\n"
-        << "        </div>\\n"
-        << "      </li>\\n"
-        << "    </ul>\\n"
-        << "  </div>\\n";
-      t << "</div>\\n";
-    }
-    if (generateTreeView)
-    {
-      t << substitute(substitute(writeSplitBarAsString("",""),
-                                 "\"","\\\""),
-                      "\n","\\n");
-    }
-    t << "\";\n";
-    t << "}\n";
-    t << "\n";
-    t << search_script;
-    t << "\n";
-    t << "</script>\n";
-#endif
-    // OPENSEARCH_PROVIDER }
-
     t << "<script language=\"php\">\n";
     t << "require_once \"search-functions.php\";\n";
     t << "main();\n";
     t << "</script>\n";
 
+    writeSearchInfo(t,"");
+
     // Write empty navigation path, to make footer connect properly
     if (generateTreeView)
     {
@@ -2895,30 +2851,6 @@ void HtmlGenerator::writeSearchPage()
 
 }
 
-#if 0
-void HtmlGenerator::generateSectionImages()
-{
-  {
-    QCString fileName = Config_getString("HTML_OUTPUT")+"/open.png";
-    QFile f(fileName);
-    if (f.open(IO_WriteOnly))
-    {
-      f.writeBlock((char*)open_gif,open_gif_len);
-    }
-    Doxygen::indexList.addImageFile("open.png");
-  }
-  {
-    QCString fileName = Config_getString("HTML_OUTPUT")+"/closed.png";
-    QFile f(fileName);
-    if (f.open(IO_WriteOnly))
-    {
-      f.writeBlock((char*)closed_gif,closed_gif_len);
-    }
-    Doxygen::indexList.addImageFile("closed.png");
-  }
-}
-#endif
-
 void HtmlGenerator::startConstraintList(const char *header)
 {
   t << "<div class=\"typeconstraint\">" << endl;
diff --git a/src/htmlgen.h b/src/htmlgen.h
index aa4c0b1..b31f6e1 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -37,7 +37,7 @@ class HtmlGenerator : public OutputGenerator
     static void writeHeaderFile(QFile &f, const char *cssname);
     static void writeFooterFile(QFile &f);
     static void writeTabData();
-    static void writeSearchFooter(FTextStream &t,const QCString &relPath);
+    static void writeSearchInfo(FTextStream &t,const QCString &relPath);
     static void writeSearchData(const char *dir);
     static void writeSearchPage();
     static QCString writeLogoAsString(const char *path);
@@ -58,6 +58,7 @@ class HtmlGenerator : public OutputGenerator
     void writeFooter();
     void endFile();
     void clearBuffer();
+    void writeSearchInfo();
 
     void startIndexSection(IndexSections) {}
     void endIndexSection(IndexSections) {}
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index 4d16c14..21cdbcc 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -13,9 +13,8 @@
  * Documents produced by Doxygen are derivative works derived from the
  * input used in their production; they are not affected by this license.
  *
- * The code is this file is largely based on a contribution from
- * Harm van der Heijden <H.v.d.Heijden@phys.tue.nl>
- * Please send thanks to him and bug reports to me :-)
+ * The original version of this file is largely based on a contribution from
+ * Harm van der Heijden.
  */
 
 #include <stdio.h>
@@ -629,12 +628,16 @@ QCString HtmlHelp::recode(const QCString &s)
  *  \param ref  the URL of to the item.
  *  \param file the file in which the item is defined.
  *  \param anchor the anchor of the item.
+ *  \param separateIndex not used.
+ *  \param addToNavIndex not used.
  */
 void HtmlHelp::addContentsItem(bool isDir,
                                const char *name,
                                const char * /*ref*/, 
                                const char *file,
-                               const char *anchor)
+                               const char *anchor,
+                               bool /* separateIndex */,
+                               bool /* addToNavIndex */)
 {
   // If we're using a binary toc then folders cannot have links. 
   if(Config_getBool("BINARY_TOC") && isDir) 
diff --git a/src/htmlhelp.h b/src/htmlhelp.h
index a600e77..bba4efe 100644
--- a/src/htmlhelp.h
+++ b/src/htmlhelp.h
@@ -71,9 +71,11 @@ class HtmlHelp  : public IndexIntf
     void decContentsDepth();
     void addContentsItem(bool isDir,
                          const char *name, 
-                         const char *ref = 0, 
-                         const char *file = 0,
-                         const char *anchor = 0);
+                         const char *ref, 
+                         const char *file,
+                         const char *anchor,
+                         bool separateIndex,
+                         bool addToNavIndex);
     //void addIndexItem(const char *level1, const char *level2, 
     //                  const char *contRef, const char *memRef,
     //                  const char *anchor,const MemberDef *md);
diff --git a/src/index.cpp b/src/index.cpp
index a72a0c6..f244c47 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -69,17 +69,17 @@ int documentedHtmlFiles;
 int documentedPages;
 int documentedDirs;
 
-int countClassHierarchy();
-int countClassMembers(int filter=CMHL_All);
-int countFileMembers(int filter=FMHL_All);
-void countFiles(int &htmlFiles,int &files);
-int countGroups();
-int countDirs();
-int countNamespaces();
-int countAnnotatedClasses(int *cp);
-int countNamespaceMembers(int filter=NMHL_All);
-int countIncludeFiles();
-void countRelatedPages(int &docPages,int &indexPages);
+static int countClassHierarchy();
+//static int countClassMembers(int filter=CMHL_All);
+//static int countFileMembers(int filter=FMHL_All);
+static void countFiles(int &htmlFiles,int &files);
+static int countGroups();
+static int countDirs();
+static int countNamespaces();
+static int countAnnotatedClasses(int *cp);
+//static int countNamespaceMembers(int filter=NMHL_All);
+//static int countIncludeFiles();
+static void countRelatedPages(int &docPages,int &indexPages);
 
 void countDataStructures()
 {
@@ -149,7 +149,7 @@ const int maxItemsBeforeQuickIndex = MAX_ITEMS_BEFORE_QUICK_INDEX;
 //----------------------------------------------------------------------------
 
 // strips w from s iff s starts with w
-bool stripWord(QCString &s,QCString w)
+static bool stripWord(QCString &s,QCString w)
 {
   bool success=FALSE;
   if (s.left(w.length())==w) 
@@ -162,7 +162,7 @@ bool stripWord(QCString &s,QCString w)
 
 //----------------------------------------------------------------------------
 // some quasi intelligent brief description abbreviator :^)
-QCString abbreviate(const char *s,const char *name)
+static QCString abbreviate(const char *s,const char *name)
 {
   QCString scopelessName=name;
   int i=scopelessName.findRev("::");
@@ -322,6 +322,7 @@ void endFile(OutputList &ol,bool skipNavIndex)
   if (!skipNavIndex)
   {
     ol.endContents();
+    ol.writeSearchInfo();
     if (generateTreeView)
     {
       ol.writeString("</div>\n");
@@ -334,6 +335,61 @@ void endFile(OutputList &ol,bool skipNavIndex)
   ol.endFile();
 }
 
+//----------------------------------------------------------------------
+template<class T> void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,const QCString &name,const QCString &anchor)
+{
+  bool hasMembers = def->getMemberLists().count()>0 || def->getMemberGroupSDict()!=0;
+  Doxygen::indexList.addContentsItem(hasMembers,name,def->getReference(),def->getOutputFileBase(),anchor,hasMembers,TRUE);
+  if (hasMembers)
+  {
+    Doxygen::indexList.incContentsDepth();
+    QListIterator<LayoutDocEntry> eli(LayoutDocManager::instance().docEntries(part));
+    LayoutDocEntry *lde;
+    for (eli.toFirst();(lde=eli.current());++eli)
+    {
+      if (lde->kind()==LayoutDocEntry::MemberDef)
+      {
+        LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
+        MemberList *ml = def->getMemberList(lmd->type);
+        if (ml)
+        {
+          MemberListIterator mi(*ml);
+          MemberDef *md;
+          for (mi.toFirst();(md=mi.current());++mi)
+          {
+            if (md->name().find('@')==-1)
+            {
+              Doxygen::indexList.addContentsItem(FALSE,
+                  md->name(),md->getReference(),md->getOutputFileBase(),md->anchor(),FALSE);
+            }
+          }
+        }
+      }
+      else if (lde->kind()==LayoutDocEntry::NamespaceClasses || 
+               lde->kind()==LayoutDocEntry::FileClasses)
+      {
+        ClassSDict *classes = def->getClassSDict();
+        if (classes)
+        {
+          ClassDef *cd;
+          ClassSDict::Iterator it(*classes);
+          for (;(cd=it.current());++it)
+          {
+            if (cd->getOuterScope()==def)
+            {
+              Doxygen::indexList.addContentsItem(FALSE,
+                            cd->localName(),
+                            cd->getReference(),cd->getOutputFileBase(),cd->anchor(),FALSE,FALSE);
+            }
+          }
+        }
+      }
+    }
+
+    Doxygen::indexList.decContentsDepth();
+  }
+}
+
 //----------------------------------------------------------------------------
 
 static bool classHasVisibleChildren(ClassDef *cd)
@@ -362,7 +418,7 @@ static bool classHasVisibleChildren(ClassDef *cd)
   return FALSE;
 }
 
-void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv)
+static void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv)
 {
   if (bcl==0) return;
   BaseClassListIterator bcli(*bcl);
@@ -449,7 +505,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,F
 //----------------------------------------------------------------------------
 /*! Generates HTML Help tree of classes */
 
-void writeClassTree(BaseClassList *cl,int level)
+static void writeClassTree(BaseClassList *cl,int level)
 {
   if (cl==0) return;
   BaseClassListIterator cli(*cl);
@@ -484,10 +540,11 @@ void writeClassTree(BaseClassList *cl,int level)
   }
 }
 
+#if 0
 //----------------------------------------------------------------------------
 /*! Generates HTML Help tree of classes */
 
-void writeClassTreeNode(ClassDef *cd,bool &started,int level)
+static void writeClassTreeNode(ClassDef *cd,bool &started,int level)
 {
   //printf("writeClassTreeNode(%s) visited=%d\n",cd->name().data(),cd->visited);
   if (cd->isVisibleInHierarchy() && !cd->visited)
@@ -517,7 +574,7 @@ void writeClassTreeNode(ClassDef *cd,bool &started,int level)
   }
 }
 
-void writeClassTree(ClassList *cl,int level)
+static void writeClassTree(ClassList *cl,int level)
 {
   if (cl==0) return;
   ClassListIterator cli(*cl);
@@ -532,7 +589,7 @@ void writeClassTree(ClassList *cl,int level)
   }
 }
 
-void writeClassTree(ClassSDict *d,int level)
+static void writeClassTree(ClassSDict *d,int level)
 {
   if (d==0) return;
   ClassSDict::Iterator cli(*d);
@@ -546,6 +603,7 @@ void writeClassTree(ClassSDict *d,int level)
     writeClassTreeNode(cli.current(),started,level);
   }
 }
+#endif
 
 //----------------------------------------------------------------------------
 
@@ -601,7 +659,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
             ol.docify(" [external]");
             ol.endTypewriter();
           }
-          Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor());
+          Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),FALSE,FALSE);
           if (ftv)
             ftv->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor()); 
         }
@@ -610,7 +668,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
           ol.startIndexItem(0,0);
           ol.parseText(cd->displayName());
           ol.endIndexItem(0,0);
-          Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),0,0,0);
+          Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),0,0,0,FALSE,FALSE);
           if (ftv)
             ftv->addContentsItem(hasChildren,cd->displayName(),0,0,0); 
         }
@@ -630,7 +688,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
   }
 }
 
-void writeClassHierarchy(OutputList &ol, FTVHelp* ftv)
+static void writeClassHierarchy(OutputList &ol, FTVHelp* ftv)
 {
   initClassHierarchy(Doxygen::classSDict);
   initClassHierarchy(Doxygen::hiddenClasses);
@@ -674,7 +732,7 @@ static int countClassesInTreeList(const ClassSDict &cl)
   return count;
 }
 
-int countClassHierarchy()
+static int countClassHierarchy()
 {
   int count=0;
   initClassHierarchy(Doxygen::classSDict);
@@ -686,20 +744,20 @@ int countClassHierarchy()
 
 //----------------------------------------------------------------------------
 
-void writeHierarchicalIndex(OutputList &ol)
+static void writeHierarchicalIndex(OutputList &ol)
 {
   if (hierarchyClasses==0) return;
   ol.pushGeneratorState();
   ol.disable(OutputGenerator::Man);
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trClassHierarchy();
   startFile(ol,"hierarchy",0, title, HLI_Hierarchy);
   startTitle(ol,0);
   ol.parseText(title);
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"hierarchy",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"hierarchy",0,TRUE,TRUE); 
   if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
   {
     ol.disable(OutputGenerator::Latex);
@@ -712,7 +770,7 @@ void writeHierarchicalIndex(OutputList &ol)
     ol.enable(OutputGenerator::Latex);
     ol.enable(OutputGenerator::RTF);
   }
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trClassHierarchyDescription());
   ol.endTextBlock();
 
   FTVHelp* ftv = 0;
@@ -741,30 +799,23 @@ void writeHierarchicalIndex(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-void writeGraphicalClassHierarchy(OutputList &ol)
+static void writeGraphicalClassHierarchy(OutputList &ol)
 {
   if (hierarchyClasses==0) return;
   ol.disableAllBut(OutputGenerator::Html);
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trClassHierarchy();
   startFile(ol,"inherits",0,title,HLI_Hierarchy,FALSE,"hierarchy");
   startTitle(ol,0);
-  //if (!Config_getString("PROJECT_NAME").isEmpty()) 
-  //{
-  //  title.prepend(Config_getString("PROJECT_NAME")+" ");
-  //}
   ol.parseText(title);
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  //Doxygen::indexList.addContentsItem(FALSE,theTranslator->trGraphicalHierarchy(),0,"inherits",0); 
   ol.startParagraph();
   ol.startTextLink("hierarchy",0);
   ol.parseText(theTranslator->trGotoTextualHierarchy());
   ol.endTextLink();
   ol.endParagraph();
-  //parseText(ol,theTranslator->trClassHierarchyDescription());
-  //ol.newParagraph();
   ol.endTextBlock();
   DotGfxHierarchyTable g;
   ol.writeGraphicalHierarchy(g);
@@ -774,7 +825,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-void countFiles(int &htmlFiles,int &files)
+static void countFiles(int &htmlFiles,int &files)
 {
   htmlFiles=0;
   files=0;
@@ -806,14 +857,15 @@ void countFiles(int &htmlFiles,int &files)
 
 //----------------------------------------------------------------------------
 
-void writeFileIndex(OutputList &ol)
+static void writeFileIndex(OutputList &ol)
 {
   if (documentedHtmlFiles==0) return;
   ol.pushGeneratorState();
   ol.disable(OutputGenerator::Man);
   if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html);
-  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files);
-  QCString title = lne->title();
+  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileList);
+  if (lne==0) lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files); // fall back
+  QCString title = lne ? lne->title() : theTranslator->trFileList();
   startFile(ol,"files",0,title,HLI_Files);
   startTitle(ol,0);
   //if (!Config_getString("PROJECT_NAME").isEmpty()) 
@@ -824,9 +876,9 @@ void writeFileIndex(OutputList &ol)
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"files",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"files",0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
   ol.endTextBlock();
 
   OutputNameDict outputNameDict(1009);
@@ -903,7 +955,7 @@ void writeFileIndex(OutputList &ol)
         if (doc)
         {
           ol.writeObjectLink(0,fd->getOutputFileBase(),0,fd->name());
-          Doxygen::indexList.addContentsItem(FALSE,fullName,fd->getReference(),fd->getOutputFileBase(),0);
+          addMembersToIndex(fd,LayoutDocManager::File,fullName,QCString());
         }
         else
         {
@@ -964,7 +1016,7 @@ void writeFileIndex(OutputList &ol)
 }
 
 //----------------------------------------------------------------------------
-int countNamespaces()
+static int countNamespaces()
 {
   int count=0;
   NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
@@ -978,13 +1030,14 @@ int countNamespaces()
 
 //----------------------------------------------------------------------------
 
-void writeNamespaceIndex(OutputList &ol)
+static void writeNamespaceIndex(OutputList &ol)
 {
   if (documentedNamespaces==0) return;
   ol.pushGeneratorState();
   ol.disable(OutputGenerator::Man);
-  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Namespaces);
-  QCString title = lne->title();
+  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceList);
+  if (lne==0) lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Namespaces); // fall back
+  QCString title = lne ? lne->title() : theTranslator->trNamespaceList();
   startFile(ol,"namespaces",0,title,HLI_Namespaces);
   startTitle(ol,0);
   //if (!Config_getString("PROJECT_NAME").isEmpty()) 
@@ -995,9 +1048,9 @@ void writeNamespaceIndex(OutputList &ol)
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"namespaces",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"namespaces",0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceListDescription(Config_getBool("EXTRACT_ALL")));
   ol.endTextBlock();
 
   bool first=TRUE;
@@ -1036,7 +1089,8 @@ void writeNamespaceIndex(OutputList &ol)
       }
       ol.endIndexValue(nd->getOutputFileBase(),hasBrief);
       //ol.writeEndAnnoItem(nd->getOutputFileBase());
-      Doxygen::indexList.addContentsItem(FALSE,nd->displayName(),nd->getReference(),nd->getOutputFileBase(),0);
+      //Doxygen::indexList.addContentsItem(FALSE,nd->displayName(),nd->getReference(),nd->getOutputFileBase(),0);
+      addMembersToIndex(nd,LayoutDocManager::Namespace,nd->displayName(),QCString());
     }
   }
   if (!first) ol.endIndexList();
@@ -1047,7 +1101,7 @@ void writeNamespaceIndex(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-int countAnnotatedClasses(int *cp)
+static int countAnnotatedClasses(int *cp)
 {
   int count=0;
   int countPrinted=0;
@@ -1069,9 +1123,7 @@ int countAnnotatedClasses(int *cp)
 }
 
 
-//----------------------------------------------------------------------
-
-void writeAnnotatedClassList(OutputList &ol)
+static void writeAnnotatedClassList(OutputList &ol)
 {
   ol.startIndexList(); 
   ClassSDict::Iterator cli(*Doxygen::classSDict);
@@ -1160,8 +1212,8 @@ void writeAnnotatedClassList(OutputList &ol)
                 );
       }
       ol.endIndexValue(cd->getOutputFileBase(),hasBrief);
-      //ol.writeEndAnnoItem(cd->getOutputFileBase());
-      Doxygen::indexList.addContentsItem(FALSE,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor());
+
+      addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(),cd->anchor());
     }
     ol.popGeneratorState();
   }
@@ -1244,7 +1296,7 @@ class AlphaIndexTableColumns : public QList<AlphaIndexTableRows>
 };
 
 // write an alphabetical index of all class with a header for each letter
-void writeAlphabeticalClassList(OutputList &ol)
+static void writeAlphabeticalClassList(OutputList &ol)
 {
   //ol.startAlphabeticalIndexList(); 
   // What starting letters are used
@@ -1478,17 +1530,17 @@ void writeAlphabeticalClassList(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-void writeAlphabeticalIndex(OutputList &ol)
+static void writeAlphabeticalIndex(OutputList &ol)
 {
   if (annotatedClasses==0) return;
   ol.pushGeneratorState();
   ol.disableAllBut(OutputGenerator::Html);
-  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Classes);
-  QCString title = lne->title();
+  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassIndex);
+  QCString title = lne ? lne->title() : theTranslator->trCompoundIndex();
   startFile(ol,"classes",0,title,HLI_Classes); 
   startTitle(ol,0);
   ol.parseText(title);
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"classes",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"classes",0,TRUE,TRUE); 
   //ol.parseText(/*Config_getString("PROJECT_NAME")+" "+*/
   //             (fortranOpt ? theTranslator->trCompoundIndexFortran() :
   //              vhdlOpt    ? VhdlDocGen::trDesignUnitIndex()             :
@@ -1503,7 +1555,7 @@ void writeAlphabeticalIndex(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-void writeAnnotatedIndex(OutputList &ol)
+static void writeAnnotatedIndex(OutputList &ol)
 {
   //printf("writeAnnotatedIndex: count=%d printed=%d\n",
   //    annotatedClasses,annotatedClassesPrinted);
@@ -1516,8 +1568,9 @@ void writeAnnotatedIndex(OutputList &ol)
     ol.disable(OutputGenerator::Latex);
     ol.disable(OutputGenerator::RTF);
   }
-  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassAnnotated);
-  QCString title = lne->title();
+  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassList);
+  if (lne==0) lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Classes); // fall back
+  QCString title = lne ? lne->title() : theTranslator->trCompoundList();
   startFile(ol,"annotated",0,title,HLI_Annotated);
   startTitle(ol,0);
   //QCString longTitle = title;
@@ -1529,9 +1582,9 @@ void writeAnnotatedIndex(OutputList &ol)
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"annotated",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"annotated",0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trCompoundListDescription());
   ol.endTextBlock();
   writeAnnotatedClassList(ol);
   Doxygen::indexList.decContentsDepth();
@@ -1893,7 +1946,7 @@ void addFileMemberNameToIndex(MemberDef *md)
 
 //----------------------------------------------------------------------------
 
-void writeQuickMemberIndex(OutputList &ol,
+static void writeQuickMemberIndex(OutputList &ol,
     MemberIndexList charUsed[MEMBER_INDEX_ENTRIES],int page,
     QCString fullName,bool multiPage)
 {
@@ -1974,9 +2027,13 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
 
   QCString extension=Doxygen::htmlFileExtension;
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trCompoundMembers();
   if (hl!=CMHL_All) title+=(QCString)" - "+getCmhlInfo(hl)->title;
 
+  Doxygen::indexList.addContentsItem(multiPageIndex,getCmhlInfo(hl)->title,0,
+                                     getCmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
+  if (multiPageIndex) Doxygen::indexList.incContentsDepth();
+
   int page;
   bool first=TRUE;
   for (page=0;page<numPages;page++)
@@ -1984,9 +2041,16 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
     if (!multiPageIndex || g_memberIndexLetterUsed[hl][page].count()>0)
     {
       QCString fileName = getCmhlInfo(hl)->fname;
-      if (multiPageIndex && !first)
+      if (multiPageIndex)
       { 
-        fileName+=QCString().sprintf("_0x%02x",page);
+        if (!first)
+        {
+          fileName+=QCString().sprintf("_0x%02x",page);
+        }
+        char cs[2];
+        cs[0]=page;
+        cs[1]=0;
+        Doxygen::indexList.addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
       }
       bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
       
@@ -1995,50 +2059,52 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
       if (!disableIndex)
       {
         ol.writeQuickLinks(TRUE,HLI_Functions);
-      }
-      startQuickIndexList(ol);
+        startQuickIndexList(ol);
 
-      // index item for global member list
-      startQuickIndexItem(ol,
-          getCmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==CMHL_All,TRUE,first);
-      ol.writeString(fixSpaces(getCmhlInfo(0)->title));
-      endQuickIndexItem(ol);
+        // index item for global member list
+        startQuickIndexItem(ol,
+            getCmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==CMHL_All,TRUE,first);
+        ol.writeString(fixSpaces(getCmhlInfo(0)->title));
+        endQuickIndexItem(ol);
 
-      // index items per category member lists
-      int i;
-      for (i=1;i<CMHL_Total;i++)
-      {
-        if (documentedClassMembers[i]>0)
+        int i;
+        // index items per category member lists
+        for (i=1;i<CMHL_Total;i++)
         {
-          startQuickIndexItem(ol,getCmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
-          ol.writeString(fixSpaces(getCmhlInfo(i)->title));
-          //printf("multiPageIndex=%d first=%d fileName=%s file=%s title=%s\n",
-          //    multiPageIndex,first,fileName.data(),getCmhlInfo(i)->fname,getCmhlInfo(i)->title.data());
-          endQuickIndexItem(ol);
+          if (documentedClassMembers[i]>0)
+          {
+            startQuickIndexItem(ol,getCmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+            ol.writeString(fixSpaces(getCmhlInfo(i)->title));
+            //printf("multiPageIndex=%d first=%d fileName=%s file=%s title=%s\n",
+            //    multiPageIndex,first,fileName.data(),getCmhlInfo(i)->fname,getCmhlInfo(i)->title.data());
+            endQuickIndexItem(ol);
+          }
         }
-      }
 
-      endQuickIndexList(ol);
+        endQuickIndexList(ol);
 
-      // quick alphabetical index
-      if (quickIndex)
-      {
-        writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
-            getCmhlInfo(hl)->fname,multiPageIndex);
+        // quick alphabetical index
+        if (quickIndex)
+        {
+          writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
+              getCmhlInfo(hl)->fname,multiPageIndex);
+        }
       }
       ol.endQuickIndices();
 
       if (generateTreeView)
       {
-        ol.writeSplitBar(getCmhlInfo(0)->fname);
+        ol.writeSplitBar(fileName);
       }
 
+      //Doxygen::indexList.addContentsItem(FALSE,title,0,fileName,0);
+
       ol.startContents();
 
       if (hl==CMHL_All)
       {
         ol.startTextBlock();
-        ol.parseText(lne->intro());
+        ol.parseText(lne ? lne->intro() : theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL")));
         ol.endTextBlock();
       }
       else
@@ -2056,12 +2122,20 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
       first=FALSE;
     }
   }
+
+  if (multiPageIndex) Doxygen::indexList.decContentsDepth();
   
   ol.popGeneratorState();
 }
 
-void writeClassMemberIndex(OutputList &ol)
+static void writeClassMemberIndex(OutputList &ol)
 {
+  if (documentedClassMembers[CMHL_All]>0)
+  {
+    LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
+    Doxygen::indexList.addContentsItem(TRUE,lne ? lne->title() : theTranslator->trCompoundMembers(),0,"functions",0); 
+    Doxygen::indexList.incContentsDepth();
+  }
   writeClassMemberIndexFiltered(ol,CMHL_All);
   writeClassMemberIndexFiltered(ol,CMHL_Functions);
   writeClassMemberIndexFiltered(ol,CMHL_Variables);
@@ -2071,12 +2145,11 @@ void writeClassMemberIndex(OutputList &ol)
   writeClassMemberIndexFiltered(ol,CMHL_Properties);
   writeClassMemberIndexFiltered(ol,CMHL_Events);
   writeClassMemberIndexFiltered(ol,CMHL_Related);
-
   if (documentedClassMembers[CMHL_All]>0)
   {
-    LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
-    Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"functions",0); 
+    Doxygen::indexList.decContentsDepth();
   }
+
 }
 
 //----------------------------------------------------------------------------
@@ -2128,7 +2201,11 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
 
   QCString extension=Doxygen::htmlFileExtension;
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trFileMembers();
+
+  Doxygen::indexList.addContentsItem(multiPageIndex,getFmhlInfo(hl)->title,0,
+                                     getFmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
+  if (multiPageIndex) Doxygen::indexList.incContentsDepth();
 
   int page;
   bool first=TRUE;
@@ -2137,9 +2214,16 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
     if (!multiPageIndex || g_fileIndexLetterUsed[hl][page].count()>0)
     {
       QCString fileName = getFmhlInfo(hl)->fname;
-      if (multiPageIndex && !first)
+      if (multiPageIndex)
       {
-        fileName+=QCString().sprintf("_0x%02x",page);
+        if (!first)
+        {
+          fileName+=QCString().sprintf("_0x%02x",page);
+        }
+        char cs[2];
+        cs[0]=page;
+        cs[1]=0;
+        Doxygen::indexList.addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
       }
       bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
       
@@ -2148,40 +2232,40 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
       if (!disableIndex)
       {
         ol.writeQuickLinks(TRUE,HLI_Globals);
-      }
-      startQuickIndexList(ol);
+        startQuickIndexList(ol);
 
-      // index item for all member lists
-      startQuickIndexItem(ol,
-          getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
-      ol.writeString(fixSpaces(getFmhlInfo(0)->title));
-      endQuickIndexItem(ol);
+        // index item for all file member lists
+        startQuickIndexItem(ol,
+            getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
+        ol.writeString(fixSpaces(getFmhlInfo(0)->title));
+        endQuickIndexItem(ol);
 
-      int i;
-      // index items for per category member lists
-      for (i=1;i<FMHL_Total;i++)
-      {
-        if (documentedFileMembers[i]>0)
+        int i;
+        // index items for per category member lists
+        for (i=1;i<FMHL_Total;i++)
         {
-          startQuickIndexItem(ol,
-              getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
-          ol.writeString(fixSpaces(getFmhlInfo(i)->title));
-          endQuickIndexItem(ol);
+          if (documentedFileMembers[i]>0)
+          {
+            startQuickIndexItem(ol,
+                getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+            ol.writeString(fixSpaces(getFmhlInfo(i)->title));
+            endQuickIndexItem(ol);
+          }
         }
-      }
 
-      endQuickIndexList(ol);
+        endQuickIndexList(ol);
 
-      if (quickIndex)
-      {
-        writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
-            getFmhlInfo(hl)->fname,multiPageIndex);
+        if (quickIndex)
+        {
+          writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
+              getFmhlInfo(hl)->fname,multiPageIndex);
+        }
       }
       ol.endQuickIndices();
 
       if (generateTreeView)
       {
-        ol.writeSplitBar(getFmhlInfo(0)->fname);
+        ol.writeSplitBar(fileName);
       }
 
       ol.startContents();
@@ -2189,7 +2273,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
       if (hl==FMHL_All)
       {
         ol.startTextBlock();
-        ol.parseText(lne->intro());
+        ol.parseText(lne ? lne->intro() : theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL")));
         ol.endTextBlock();
       }
       else
@@ -2208,11 +2292,18 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
       first=FALSE;
     }
   }
+  if (multiPageIndex) Doxygen::indexList.decContentsDepth();
   ol.popGeneratorState();
 }
 
-void writeFileMemberIndex(OutputList &ol)
+static void writeFileMemberIndex(OutputList &ol)
 {
+  if (documentedFileMembers[FMHL_All]>0)
+  {
+    LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
+    Doxygen::indexList.addContentsItem(FALSE,lne ? lne->title() : theTranslator->trFileMembers(),0,"globals",0); 
+    Doxygen::indexList.incContentsDepth();
+  }
   writeFileMemberIndexFiltered(ol,FMHL_All);
   writeFileMemberIndexFiltered(ol,FMHL_Functions);
   writeFileMemberIndexFiltered(ol,FMHL_Variables);
@@ -2220,12 +2311,11 @@ void writeFileMemberIndex(OutputList &ol)
   writeFileMemberIndexFiltered(ol,FMHL_Enums);
   writeFileMemberIndexFiltered(ol,FMHL_EnumValues);
   writeFileMemberIndexFiltered(ol,FMHL_Defines);
-
   if (documentedFileMembers[FMHL_All]>0)
   {
-    LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
-    Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"globals",0); 
+    Doxygen::indexList.decContentsDepth();
   }
+
 }
 
 //----------------------------------------------------------------------------
@@ -2279,7 +2369,11 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
 
   QCString extension=Doxygen::htmlFileExtension;
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trNamespaceMembers();
+
+  Doxygen::indexList.addContentsItem(multiPageIndex,getNmhlInfo(hl)->title,0,
+                                     getNmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
+  if (multiPageIndex) Doxygen::indexList.incContentsDepth();
 
   int page;
   bool first=TRUE;
@@ -2288,9 +2382,16 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
     if (!multiPageIndex || g_namespaceIndexLetterUsed[hl][page].count()>0)
     {
       QCString fileName = getNmhlInfo(hl)->fname;
-      if (multiPageIndex && !first)
+      if (multiPageIndex)
       {
-        fileName+=QCString().sprintf("_0x%02x",page);
+        if (!first)
+        {
+          fileName+=QCString().sprintf("_0x%02x",page);
+        }
+        char cs[2];
+        cs[0]=page;
+        cs[1]=0;
+        Doxygen::indexList.addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
       }
       bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
       
@@ -2299,39 +2400,41 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
       if (!disableIndex)
       {
         ol.writeQuickLinks(TRUE,HLI_NamespaceMembers);
-      }
-      startQuickIndexList(ol);
+        startQuickIndexList(ol);
 
-      startQuickIndexItem(ol,
-          getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
-      ol.writeString(fixSpaces(getNmhlInfo(0)->title));
-      endQuickIndexItem(ol);
+        // index item for all namespace member lists
+        startQuickIndexItem(ol,
+            getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
+        ol.writeString(fixSpaces(getNmhlInfo(0)->title));
+        endQuickIndexItem(ol);
 
-      int i;
-      for (i=1;i<NMHL_Total;i++)
-      {
-        if (documentedNamespaceMembers[i]>0)
+        int i;
+        // index items per category member lists
+        for (i=1;i<NMHL_Total;i++)
         {
-          startQuickIndexItem(ol,
-              getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
-          ol.writeString(fixSpaces(getNmhlInfo(i)->title));
-          endQuickIndexItem(ol);
+          if (documentedNamespaceMembers[i]>0)
+          {
+            startQuickIndexItem(ol,
+                getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+            ol.writeString(fixSpaces(getNmhlInfo(i)->title));
+            endQuickIndexItem(ol);
+          }
         }
-      }
 
-      endQuickIndexList(ol);
+        endQuickIndexList(ol);
 
-      if (quickIndex)
-      {
-        writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
-            getNmhlInfo(hl)->fname,multiPageIndex);
-      }
+        if (quickIndex)
+        {
+          writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
+              getNmhlInfo(hl)->fname,multiPageIndex);
+        }
 
+      }
       ol.endQuickIndices();
 
       if (generateTreeView)
       {
-        ol.writeSplitBar(getNmhlInfo(0)->fname);
+        ol.writeSplitBar(fileName);
       }
 
       ol.startContents();
@@ -2339,7 +2442,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
       if (hl==NMHL_All)
       {
         ol.startTextBlock();
-        ol.parseText(lne->intro());
+        ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL")));
         ol.endTextBlock();
       }
       else
@@ -2358,11 +2461,18 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
       endFile(ol);
     }
   }
+  if (multiPageIndex) Doxygen::indexList.decContentsDepth();
   ol.popGeneratorState();
 }
 
-void writeNamespaceMemberIndex(OutputList &ol)
+static void writeNamespaceMemberIndex(OutputList &ol)
 {
+  if (documentedNamespaceMembers[NMHL_All]>0)
+  {
+    LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
+    Doxygen::indexList.addContentsItem(FALSE,lne ? lne->title() : theTranslator->trNamespaceMembers(),0,"namespacemembers",0); 
+    Doxygen::indexList.incContentsDepth();
+  }
   //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
   writeNamespaceMemberIndexFiltered(ol,NMHL_All);
   writeNamespaceMemberIndexFiltered(ol,NMHL_Functions);
@@ -2370,12 +2480,11 @@ void writeNamespaceMemberIndex(OutputList &ol)
   writeNamespaceMemberIndexFiltered(ol,NMHL_Typedefs);
   writeNamespaceMemberIndexFiltered(ol,NMHL_Enums);
   writeNamespaceMemberIndexFiltered(ol,NMHL_EnumValues);
-
   if (documentedNamespaceMembers[NMHL_All]>0)
   {
-    LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
-    Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"namespacemembers",0); 
+    Doxygen::indexList.decContentsDepth();
   }
+
 }
 
 //----------------------------------------------------------------------------
@@ -3035,22 +3144,22 @@ void writeSearchCategories(FTextStream &t)
 
 //----------------------------------------------------------------------------
 
-void writeExampleIndex(OutputList &ol)
+static void writeExampleIndex(OutputList &ol)
 {
   if (Doxygen::exampleSDict->count()==0) return;
   ol.pushGeneratorState();
   ol.disable(OutputGenerator::Man);
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Examples);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trExamples();
   startFile(ol,"examples",0,title,HLI_Examples);
   startTitle(ol,0);
   ol.parseText(title);
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"examples",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"examples",0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trExamplesDescription());
   ol.endTextBlock();
   ol.startItemList();
   PageSDict::Iterator pdi(*Doxygen::exampleSDict);
@@ -3062,12 +3171,12 @@ void writeExampleIndex(OutputList &ol)
     if (!pd->title().isEmpty())
     {
       ol.writeObjectLink(0,n,0,pd->title());
-      Doxygen::indexList.addContentsItem(FALSE,filterTitle(pd->title()),pd->getReference(),n,0);
+      Doxygen::indexList.addContentsItem(FALSE,filterTitle(pd->title()),pd->getReference(),n,0,FALSE,TRUE);
     }
     else
     {
       ol.writeObjectLink(0,n,0,pd->name());
-      Doxygen::indexList.addContentsItem(FALSE,pd->name(),pd->getReference(),n,0);
+      Doxygen::indexList.addContentsItem(FALSE,pd->name(),pd->getReference(),n,0,FALSE,TRUE);
     }
     ol.endItemListItem();
     ol.writeString("\n");
@@ -3156,7 +3265,7 @@ bool writeMemberNavIndex(FTextStream &t,
 
 //----------------------------------------------------------------------------
 
-bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &first)
+static bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &first)
 {
   static struct NavEntryCountMap 
   {
@@ -3168,12 +3277,15 @@ bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &fir
     { LayoutNavEntry::Pages,            indexedPages>0                         },
     { LayoutNavEntry::Modules,          documentedGroups>0                     },
     { LayoutNavEntry::Namespaces,       documentedNamespaces>0                 },
+    { LayoutNavEntry::NamespaceList,    documentedNamespaces>0                 },
     { LayoutNavEntry::NamespaceMembers, documentedNamespaceMembers[NMHL_All]>0 },
     { LayoutNavEntry::Classes,          annotatedClasses>0                     },
-    { LayoutNavEntry::ClassAnnotated,   annotatedClasses>0                     },
+    { LayoutNavEntry::ClassList,        annotatedClasses>0                     },
+    { LayoutNavEntry::ClassIndex,       annotatedClasses>0                     },
     { LayoutNavEntry::ClassHierarchy,   hierarchyClasses>0                     },
     { LayoutNavEntry::ClassMembers,     documentedClassMembers[CMHL_All]>0     },
     { LayoutNavEntry::Files,            documentedFiles>0                      },
+    { LayoutNavEntry::FileList,         documentedFiles>0                      },
     { LayoutNavEntry::FileGlobals,      documentedFileMembers[FMHL_All]>0      },
     { LayoutNavEntry::Dirs,             documentedDirs>0                       },
     { LayoutNavEntry::Examples,         Doxygen::exampleSDict->count()>0       }
@@ -3237,7 +3349,7 @@ bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &fir
 
 //----------------------------------------------------------------------------
 
-void countRelatedPages(int &docPages,int &indexPages)
+static void countRelatedPages(int &docPages,int &indexPages)
 {
   docPages=indexPages=0;
   PageSDict::Iterator pdi(*Doxygen::pageSDict);
@@ -3278,7 +3390,7 @@ static void writeSubPages(PageDef *pd)
 
       bool hasSubPages = subPage->hasSubPages();
 
-      Doxygen::indexList.addContentsItem(hasSubPages,pageTitle,subPage->getReference(),subPage->getOutputFileBase(),0);
+      Doxygen::indexList.addContentsItem(hasSubPages,pageTitle,subPage->getReference(),subPage->getOutputFileBase(),0,hasSubPages,TRUE);
       writeSubPages(subPage);
     }
   }
@@ -3286,13 +3398,13 @@ static void writeSubPages(PageDef *pd)
 
 }
 
-void writePageIndex(OutputList &ol)
+static void writePageIndex(OutputList &ol)
 {
   if (indexedPages==0) return;
   ol.pushGeneratorState();
   ol.disableAllBut(OutputGenerator::Html);
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Pages);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trRelatedPages();
   startFile(ol,"pages",0,title,HLI_Pages);
   startTitle(ol,0);
   //if (!Config_getString("PROJECT_NAME").isEmpty()) 
@@ -3303,9 +3415,9 @@ void writePageIndex(OutputList &ol)
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"pages",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"pages",0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trRelatedPagesDescription());
   ol.endTextBlock();
   startIndexHierarchy(ol,0);
   PageSDict::Iterator pdi(*Doxygen::pageSDict);
@@ -3334,7 +3446,7 @@ void writePageIndex(OutputList &ol)
         ol.endTypewriter();
       }
       ol.writeString("\n");
-      Doxygen::indexList.addContentsItem(hasSubPages,filterTitle(pageTitle),pd->getReference(),pd->getOutputFileBase(),0);
+      Doxygen::indexList.addContentsItem(hasSubPages,filterTitle(pageTitle),pd->getReference(),pd->getOutputFileBase(),0,hasSubPages,TRUE);
       writeSubPages(pd);
       ol.endIndexListItem();
     }
@@ -3347,7 +3459,7 @@ void writePageIndex(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-int countGroups()
+static int countGroups()
 {
   int count=0;
   GroupSDict::Iterator gli(*Doxygen::groupSDict);
@@ -3365,7 +3477,7 @@ int countGroups()
 
 //----------------------------------------------------------------------------
 
-int countDirs()
+static int countDirs()
 {
   int count=0;
   SDict<DirDef>::Iterator dli(*Doxygen::directories);
@@ -3413,7 +3525,7 @@ void writeGraphInfo(OutputList &ol)
   ol.popGeneratorState();
 }
 
-void writeGroupIndexItem(GroupDef *gd,MemberList *ml,const QCString &title)
+static void writeGroupIndexItem(GroupDef *gd,MemberList *ml,const QCString &title)
 {
   if (ml && ml->count()>0)
   {
@@ -3426,10 +3538,10 @@ void writeGroupIndexItem(GroupDef *gd,MemberList *ml,const QCString &title)
         if (first)
         {
           first=FALSE;
-          Doxygen::indexList.addContentsItem(TRUE, convertToHtml(title,TRUE), gd->getReference(), gd->getOutputFileBase(), 0);
+          Doxygen::indexList.addContentsItem(TRUE, convertToHtml(title,TRUE), gd->getReference(), gd->getOutputFileBase(), 0,TRUE,FALSE);
           Doxygen::indexList.incContentsDepth();
         }
-        Doxygen::indexList.addContentsItem(FALSE,md->name(),md->getReference(),md->getOutputFileBase(),md->anchor()); 
+        Doxygen::indexList.addContentsItem(FALSE,md->name(),md->getReference(),md->getOutputFileBase(),md->anchor(),FALSE,TRUE); 
       }
       md=ml->next();
     }
@@ -3488,7 +3600,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* ftv)
 
     bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
     //printf("gd=`%s': pageDict=%d\n",gd->name().data(),gd->pageDict->count());
-    Doxygen::indexList.addContentsItem(isDir,gd->groupTitle(),gd->getReference(),gd->getOutputFileBase(),0); 
+    Doxygen::indexList.addContentsItem(isDir,gd->groupTitle(),gd->getReference(),gd->getOutputFileBase(),0,isDir,TRUE); 
     Doxygen::indexList.incContentsDepth();
     if (ftv)
     {
@@ -3524,7 +3636,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* ftv)
                                          convertToHtml(pd->title(),TRUE),
                                          gd->getReference(),
                                          gd->getOutputFileBase(),
-                                         si ? si->label.data() : 0);
+                                         si ? si->label.data() : 0,
+                                         FALSE,
+                                         TRUE); // addToNavIndex
     }
 
     // write subgroups
@@ -3643,7 +3757,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* ftv)
   }
 }
 
-void writeGroupHierarchy(OutputList &ol, FTVHelp* ftv)
+static void writeGroupHierarchy(OutputList &ol, FTVHelp* ftv)
 {
   if (ftv)
   {
@@ -3667,7 +3781,7 @@ void writeGroupHierarchy(OutputList &ol, FTVHelp* ftv)
 }
 
 //----------------------------------------------------------------------------
-void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv)
+static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv)
 {
   if (level>20)
   {
@@ -3684,7 +3798,7 @@ void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv)
                 dd->getFiles() && dd->getFiles()->count()>0 // there are files
                );
   //printf("gd=`%s': pageDict=%d\n",gd->name().data(),gd->pageDict->count());
-  Doxygen::indexList.addContentsItem(isDir,dd->shortName(),dd->getReference(),dd->getOutputFileBase(),0); 
+  Doxygen::indexList.addContentsItem(isDir,dd->shortName(),dd->getReference(),dd->getOutputFileBase(),0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
   if (ftv)
   {
@@ -3725,7 +3839,10 @@ void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv)
       FileDef *fd=fileList->first();
       while (fd)
       {
-        Doxygen::indexList.addContentsItem(FALSE, convertToHtml(fd->name(),TRUE),fd->getReference(), fd->getOutputFileBase(), 0);
+        if (fd->isLinkable())
+        {
+          Doxygen::indexList.addContentsItem(FALSE, convertToHtml(fd->name(),TRUE),fd->getReference(), fd->getOutputFileBase(), 0);
+        }
         fd=fileList->next();
       }
     }
@@ -3737,7 +3854,7 @@ void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv)
     ftv->decContentsDepth();
 }
 
-void writeDirHierarchy(OutputList &ol, FTVHelp* ftv)
+static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv)
 {
   if (ftv)
   {
@@ -3758,13 +3875,13 @@ void writeDirHierarchy(OutputList &ol, FTVHelp* ftv)
 
 //----------------------------------------------------------------------------
 
-void writeGroupIndex(OutputList &ol)
+static void writeGroupIndex(OutputList &ol)
 {
   if (documentedGroups==0) return; 
   ol.pushGeneratorState(); 
   ol.disable(OutputGenerator::Man);
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Modules);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trModules();
   startFile(ol,"modules",0,title,HLI_Modules);
   startTitle(ol,0);
   //QCString title = theTranslator->trModules();
@@ -3776,9 +3893,9 @@ void writeGroupIndex(OutputList &ol)
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"modules",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"modules",0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trModulesDescription());
   ol.endTextBlock();
 
   FTVHelp* ftv = 0;
@@ -3808,13 +3925,13 @@ void writeGroupIndex(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-void writeDirIndex(OutputList &ol)
+static void writeDirIndex(OutputList &ol)
 {
   if (documentedDirs==0) return; 
   ol.pushGeneratorState(); 
   ol.disable(OutputGenerator::Man);
   LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Dirs);
-  QCString title = lne->title();
+  QCString title = lne ? lne->title() : theTranslator->trDirectories();
   startFile(ol,"dirs",0,title,HLI_Directories);
   startTitle(ol,0);
   //if (!Config_getString("PROJECT_NAME").isEmpty()) 
@@ -3825,9 +3942,9 @@ void writeDirIndex(OutputList &ol)
   endTitle(ol,0,0);
   ol.startContents();
   ol.startTextBlock();
-  Doxygen::indexList.addContentsItem(TRUE,title,0,"dirs",0); 
+  Doxygen::indexList.addContentsItem(TRUE,title,0,"dirs",0,TRUE,TRUE); 
   Doxygen::indexList.incContentsDepth();
-  ol.parseText(lne->intro());
+  ol.parseText(lne ? lne->intro() : theTranslator->trDirDescription());
   ol.endTextBlock();
 
   FTVHelp* ftv = 0;
@@ -3867,7 +3984,7 @@ static bool mainPageHasTitle()
 
 //----------------------------------------------------------------------------
 
-void writeIndex(OutputList &ol)
+static void writeIndex(OutputList &ol)
 {
   static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
   static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
@@ -3923,7 +4040,7 @@ void writeIndex(OutputList &ol)
   
   if (Doxygen::mainPage)
   {
-    Doxygen::indexList.addContentsItem(Doxygen::mainPage->hasSubPages(),title,0,indexName,0); 
+    Doxygen::indexList.addContentsItem(Doxygen::mainPage->hasSubPages(),title,0,indexName,0,Doxygen::mainPage->hasSubPages(),TRUE); 
 
     if (Doxygen::mainPage->hasSubPages())
     {
@@ -4183,7 +4300,7 @@ void writeIndex(OutputList &ol)
     ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trModuleDocumentation():theTranslator->trNamespaceDocumentation()));
     ol.endIndexSection(isNamespaceDocumentation);
   }
-  if (annotatedClasses>0)
+  if (annotatedClassesPrinted>0)
   {
     ol.startIndexSection(isClassDocumentation);
     ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trTypeDocumentation():theTranslator->trClassDocumentation()));
@@ -4223,5 +4340,160 @@ void writeIndex(OutputList &ol)
   ol.popGeneratorState();
 }
 
+static QArray<bool> indexWritten;
+
+static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry> &entries)
+{
+  QListIterator<LayoutNavEntry> li(entries);
+  LayoutNavEntry *lne;
+  for (li.toFirst();(lne=li.current());++li)
+  {
+    LayoutNavEntry::Kind kind = lne->kind();
+    uint index = (uint)kind;
+    if (index>=indexWritten.size())
+    {
+      uint i;
+      uint oldSize = indexWritten.size();
+      uint newSize = index+1;
+      indexWritten.resize(newSize);
+      for (i=oldSize;i<newSize;i++) indexWritten.at(i)=FALSE;
+    }
+    //printf("starting %s kind=%d\n",lne->title().data(),lne->kind());
+    bool needsClosing=FALSE;
+    if (!indexWritten.at(index))
+    {
+      switch(kind)
+      {
+        case LayoutNavEntry::MainPage: 
+          msg("Generating index page...\n");
+          writeIndex(ol); 
+          break;
+        case LayoutNavEntry::Pages: 
+          msg("Generating page index...\n");
+          writePageIndex(ol);
+          break;
+        case LayoutNavEntry::Modules: 
+          msg("Generating module index...\n");
+          writeGroupIndex(ol);
+          break;
+        case LayoutNavEntry::Namespaces: 
+          {
+            if (documentedNamespaces>0)
+            {
+              Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,0,0); 
+              Doxygen::indexList.incContentsDepth();
+              needsClosing=TRUE;
+            }
+            if (LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Namespaces)!=lne) // for backward compatibility with old layout file
+            {
+              msg("Generating namespace index...\n");
+              writeNamespaceIndex(ol);
+            }
+          }
+          break;
+        case LayoutNavEntry::NamespaceList: 
+          msg("Generating namespace index...\n");
+          writeNamespaceIndex(ol);
+          break;
+        case LayoutNavEntry::NamespaceMembers: 
+          msg("Generating namespace member index...\n");
+          writeNamespaceMemberIndex(ol);
+          break;
+        case LayoutNavEntry::Classes: 
+          if (annotatedClasses>0)
+          {
+            Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,0,0); 
+            Doxygen::indexList.incContentsDepth();
+            needsClosing=TRUE;
+          }
+          if (LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Classes)!=lne) // for backward compatibility with old layout file
+          {
+            msg("Generating annotated compound index...\n");
+            writeAnnotatedIndex(ol);
+          }
+          break;
+        case LayoutNavEntry::ClassList: 
+          msg("Generating annotated compound index...\n");
+          writeAnnotatedIndex(ol);
+          break;
+        case LayoutNavEntry::ClassIndex:
+          msg("Generating alphabetical compound index...\n");
+          writeAlphabeticalIndex(ol);
+          break;
+        case LayoutNavEntry::ClassHierarchy: 
+          msg("Generating hierarchical class index...\n");
+          writeHierarchicalIndex(ol);
+          if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
+          {
+            msg("Generating graphical class hierarchy...\n");
+            writeGraphicalClassHierarchy(ol);
+          }
+          break;
+        case LayoutNavEntry::ClassMembers: 
+          msg("Generating member index...\n");
+          writeClassMemberIndex(ol);
+          break;
+        case LayoutNavEntry::Files: 
+          if (documentedHtmlFiles>0)
+          {
+            Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,0,0); 
+            Doxygen::indexList.incContentsDepth();
+            needsClosing=TRUE;
+          }
+          if (LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files)!=lne) // for backward compatibility with old layout file
+          {
+            msg("Generating file index...\n");
+            writeFileIndex(ol);
+          }
+          break;
+        case LayoutNavEntry::FileList: 
+          msg("Generating file index...\n");
+          writeFileIndex(ol);
+          break;
+        case LayoutNavEntry::FileGlobals: 
+          msg("Generating file member index...\n");
+          writeFileMemberIndex(ol);
+          break;
+        case LayoutNavEntry::Dirs: 
+          if (Config_getBool("SHOW_DIRECTORIES"))
+          {
+            msg("Generating directory index...\n");
+            writeDirIndex(ol);
+          }
+          break;
+        case LayoutNavEntry::Examples: 
+          msg("Generating example index...\n");
+          writeExampleIndex(ol);
+          break;
+        case LayoutNavEntry::User: 
+          break;
+      }
+      indexWritten.at(index)=TRUE;
+    }
+    writeIndexHierarchyEntries(ol,lne->children());
+    if (needsClosing)
+    {
+      switch(kind)
+      {
+        case LayoutNavEntry::Namespaces: 
+        case LayoutNavEntry::Classes: 
+        case LayoutNavEntry::Files: 
+          Doxygen::indexList.decContentsDepth();
+          break;
+        default:
+          break;
+      }
+    }
+    //printf("ending %s kind=%d\n",lne->title().data(),lne->kind());
+  }
+}
 
+void writeIndexHierarchy(OutputList &ol)
+{
+  LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry();
+  if (lne)
+  {
+    writeIndexHierarchyEntries(ol,lne->children());
+  }
+}
 
diff --git a/src/index.h b/src/index.h
index 51a31c5..b307dca 100644
--- a/src/index.h
+++ b/src/index.h
@@ -36,8 +36,9 @@ class IndexIntf
     virtual void finalize() = 0;
     virtual void incContentsDepth() = 0;
     virtual void decContentsDepth() = 0;
-    virtual void addContentsItem(bool isDir, const char *name, const char *ref = 0, 
-                                 const char *file = 0, const char *anchor = 0) = 0;
+    virtual void addContentsItem(bool isDir, const char *name, const char *ref, 
+                                 const char *file, const char *anchor, bool separateIndex,
+                                 bool addToNavIndex) = 0;
     virtual void addIndexItem(Definition *context,MemberDef *md,const char *title) = 0;
     virtual void addIndexFile(const char *name) = 0;
     virtual void addImageFile(const char *name) = 0;
@@ -90,6 +91,20 @@ class IndexList : public IndexIntf
       for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5);
     }
 
+    template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6>
+    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6)
+    {
+      QListIterator<IndexIntf> li(m_intfs);
+      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6);
+    }
+
+    template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7>
+    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6,A7),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7)
+    {
+      QListIterator<IndexIntf> li(m_intfs);
+      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7);
+    }
+
   public:
     /** Creates a list of indexes */
     IndexList() { m_intfs.setAutoDelete(TRUE); }
@@ -106,10 +121,10 @@ class IndexList : public IndexIntf
     { foreach(&IndexIntf::incContentsDepth); }
     void decContentsDepth()
     { foreach(&IndexIntf::decContentsDepth); }
-    void addContentsItem(bool isDir, const char *name, const char *ref = 0, 
-                         const char *file = 0, const char *anchor = 0)
-    { foreach<bool,const char *,const char *,const char *,const char*>
-             (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor); }
+    void addContentsItem(bool isDir, const char *name, const char *ref, 
+                         const char *file, const char *anchor,bool separateIndex=FALSE,bool addToNavIndex=FALSE)
+    { foreach<bool,const char *,const char *,const char *,const char*,bool,bool>
+             (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor,separateIndex,addToNavIndex); }
     void addIndexItem(Definition *context,MemberDef *md,const char *title=0)
     { foreach<Definition *,MemberDef *>
              (&IndexIntf::addIndexItem,context,md,title); }
@@ -219,28 +234,8 @@ enum ClassHighlight
   CHL_Total = CHL_Exceptions+1
 };
 
-void writeIndex(OutputList &ol);
-void writeHierarchicalIndex(OutputList &ol);
-void writeAlphabeticalIndex(OutputList &ol);
-void writeClassHierarchy(OutputList &ol);
-void writeAnnotatedIndex(OutputList &ol);
-void writeAnnotatedClassList(OutputList &ol);
-void writeMemberList(OutputList &ol,bool useSections);
-void writeSourceIndex(OutputList &ol);
-void writeHeaderIndex(OutputList &ol);
-void writeHeaderFileList(OutputList &ol);
-void writeExampleIndex(OutputList &ol);
-void writePageIndex(OutputList &ol);
-void writeFileIndex(OutputList &ol);
-void writeNamespaceIndex(OutputList &ol);
-void writeGroupIndex(OutputList &ol);
-void writeDirIndex(OutputList &ol);
-void writePackageIndex(OutputList &ol);
-void writeClassMemberIndex(OutputList &ol);
-void writeFileMemberIndex(OutputList &ol);
-void writeNamespaceMemberIndex(OutputList &ol);
-void writeGraphicalClassHierarchy(OutputList &ol);
 void writeGraphInfo(OutputList &ol);
+void writeIndexHierarchy(OutputList &ol);
 
 void countDataStructures();
 
@@ -253,9 +248,9 @@ extern int indexedPages;
 extern int documentedClassMembers[CMHL_Total];
 extern int documentedFileMembers[FMHL_Total];
 extern int documentedNamespaceMembers[NMHL_Total];
+extern int documentedDirs;
 extern int documentedHtmlFiles;
 extern int documentedPages;
-extern int documentedDirs;
 
 void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
 void endTitle(OutputList &ol,const char *fileName,const char *name);
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index d28f5e0..c3b9c6f 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -1606,7 +1606,7 @@ void LatexGenerator::startTitleHead(const char *fileName)
   static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
   if (usePDFLatex && pdfHyperlinks && fileName)
   {
-    t << "\\hypertarget{" << stripPath(fileName) << "}{" << endl;
+    t << "\\hypertarget{" << stripPath(fileName) << "}{";
   }
   if (Config_getBool("COMPACT_LATEX")) 
   {
@@ -2514,7 +2514,7 @@ void LatexGenerator::lineBreak(const char *)
 
 void LatexGenerator::startMemberDocSimple()
 {
-  t << "\\begin{DoxyFields}{" << endl;
+  t << "\\begin{DoxyFields}{";
   docify(theTranslator->trCompoundMembers());
   t << "}" << endl;
 }
diff --git a/src/latexgen.h b/src/latexgen.h
index cfa7375..85c0b3f 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -47,6 +47,7 @@ class LatexGenerator : public OutputGenerator
     void printDoc(DocNode *,const char *);
 
     void startFile(const char *name,const char *manName,const char *title);
+    void writeSearchInfo() {}
     void writeFooter() {}
     void endFile();
     void clearBuffer();
diff --git a/src/layout.cpp b/src/layout.cpp
index 011141b..e108046 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -832,6 +832,13 @@ class LayoutParser : public QXmlDefaultHandler
           javaOpt    ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
           "namespaces"
         },
+        { "namespacelist",
+          LayoutNavEntry::NamespaceList,
+          javaOpt    ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
+          QCString(),
+          javaOpt    ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
+          "namespaces"
+        },
         { "namespacemembers",
           LayoutNavEntry::NamespaceMembers,
           javaOpt    ? theTranslator->trPackageMembers() : fortranOpt ? theTranslator->trModulesMembers() : theTranslator->trNamespaceMembers(),
@@ -840,19 +847,26 @@ class LayoutParser : public QXmlDefaultHandler
           "namespacemembers"
         },
         { "classindex",
-          LayoutNavEntry::Classes,
+          LayoutNavEntry::ClassIndex,
           fortranOpt ? theTranslator->trDataTypes() : vhdlOpt ? VhdlDocGen::trDesignUnits() : theTranslator->trCompoundIndex(),
           QCString(),
           QCString(),
           "classes"
         },
         { "classes",
-          LayoutNavEntry::ClassAnnotated,
+          LayoutNavEntry::Classes,
           fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trClasses(),
           theTranslator->trCompoundList(),
           fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
           "annotated"
         },
+        { "classlist",
+          LayoutNavEntry::ClassList,
+          theTranslator->trCompoundList(),
+          QCString(),
+          fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
+          "annotated"
+        },
         { "hierarchy",
           LayoutNavEntry::ClassHierarchy,
           vhdlOpt    ? VhdlDocGen::trDesignUnitHierarchy() : theTranslator->trClassHierarchy(),
@@ -874,6 +888,13 @@ class LayoutParser : public QXmlDefaultHandler
           theTranslator->trFileListDescription(extractAll),
           "files"
         },
+        { "filelist",
+          LayoutNavEntry::FileList,
+          theTranslator->trFileList(),
+          QCString(),
+          theTranslator->trFileListDescription(extractAll),
+          "files"
+        },
         { "globals",
           LayoutNavEntry::FileGlobals,
           theTranslator->trFileMembers(),
diff --git a/src/layout.h b/src/layout.h
index 47ba5f3..867a058 100644
--- a/src/layout.h
+++ b/src/layout.h
@@ -115,12 +115,15 @@ struct LayoutNavEntry
       Pages,
       Modules, 
       Namespaces, 
+      NamespaceList,
       NamespaceMembers,
-      Classes, 
-      ClassAnnotated, 
+      Classes,
+      ClassList, 
+      ClassIndex, 
       ClassHierarchy, 
       ClassMembers,
       Files, 
+      FileList,
       FileGlobals,
       Dirs, 
       Examples,
diff --git a/src/layout_default.h b/src/layout_default.h
index 06af510..7ed1629 100644
--- a/src/layout_default.h
+++ b/src/layout_default.h
@@ -5,17 +5,17 @@
 "    <tab type=\"pages\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "    <tab type=\"modules\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "    <tab type=\"namespaces\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"namespaces\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
+"      <tab type=\"namespacelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "      <tab type=\"namespacemembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "    </tab>\n"
 "    <tab type=\"classes\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"classes\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
+"      <tab type=\"classlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "      <tab type=\"classindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n"
 "      <tab type=\"hierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "      <tab type=\"classmembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "    </tab>\n"
 "    <tab type=\"files\" visible=\"yes\" title=\"\">\n"
-"      <tab type=\"files\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
+"      <tab type=\"filelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "      <tab type=\"globals\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
 "    </tab>\n"
 "    <tab type=\"dirs\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
diff --git a/src/layout_default.xml b/src/layout_default.xml
index 8ef0c12..5b60278 100644
--- a/src/layout_default.xml
+++ b/src/layout_default.xml
@@ -5,17 +5,17 @@
     <tab type="pages" visible="yes" title="" intro=""/>
     <tab type="modules" visible="yes" title="" intro=""/>
     <tab type="namespaces" visible="yes" title="">
-      <tab type="namespaces" visible="yes" title="" intro=""/>
+      <tab type="namespacelist" visible="yes" title="" intro=""/>
       <tab type="namespacemembers" visible="yes" title="" intro=""/>
     </tab>
     <tab type="classes" visible="yes" title="">
-      <tab type="classes" visible="yes" title="" intro=""/>
+      <tab type="classlist" visible="yes" title="" intro=""/>
       <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> 
       <tab type="hierarchy" visible="yes" title="" intro=""/>
       <tab type="classmembers" visible="yes" title="" intro=""/>
     </tab>
     <tab type="files" visible="yes" title="">
-      <tab type="files" visible="yes" title="" intro=""/>
+      <tab type="filelist" visible="yes" title="" intro=""/>
       <tab type="globals" visible="yes" title="" intro=""/>
     </tab>
     <tab type="dirs" visible="yes" title="" intro=""/>
diff --git a/src/libdoxygen.t b/src/libdoxygen.t
index cc69203..e2c17b7 100644
--- a/src/libdoxygen.t
+++ b/src/libdoxygen.t
@@ -149,6 +149,9 @@ jquery_js.h: jquery.js
 jquery_ui_js.h: jquery_ui.js
 	cat jquery_ui.js | $(TO_C_CMD) >jquery_ui_js.h
 
+jquery_fx_js.h: jquery_fx.js
+	cat jquery_fx.js | $(TO_C_CMD) >jquery_fx_js.h
+
 sizzle_js.h: sizzle.js
 	cat sizzle.js | $(TO_C_CMD) >sizzle_js.h
 
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index ff56f2c..541a5e1 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -965,7 +965,7 @@ void ManDocVisitor::filter(const char *str)
     {
       switch(c)
       {
-        case '.':  m_t << "'\\&."; break; // see  bug652277
+        case '.':  m_t << "\\&."; break; // see  bug652277
         case '\\': m_t << "\\\\"; break;
         case '"':  c = '\''; // fall through
         default: m_t << c; break;
diff --git a/src/mangen.h b/src/mangen.h
index d312ecc..c2c1ba2 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -44,6 +44,7 @@ class ManGenerator : public OutputGenerator
 
     static void init();
     void startFile(const char *name,const char *manName,const char *title);
+    void writeSearchInfo() {}
     void writeFooter() {}
     void endFile();
     void clearBuffer();
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 3cca845..1ef623c 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -542,6 +542,7 @@ void MemberList::writeDocumentation(OutputList &ol,
   ol.endMemberDocList();
 }
 
+// members in a table
 void MemberList::writeSimpleDocumentation(OutputList &ol,
                      Definition *container)
 {
@@ -559,6 +560,7 @@ void MemberList::writeSimpleDocumentation(OutputList &ol,
   ol.endMemberDocSimple();
 }
 
+// separate member pages
 void MemberList::writeDocumentationPage(OutputList &ol,
                      const char *scopeName, Definition *container)
 {
@@ -573,35 +575,36 @@ void MemberList::writeDocumentationPage(OutputList &ol,
               container->getOutputFileBase());
     if (!generateTreeView)
     {
-      container->writeNavigationPath(ol);
+      container->writeNavigationPath(ol,FALSE);
       ol.endQuickIndices();
     }
     ol.startContents();
 
-    ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"
-                   "  <tr>\n"
-                   "   <td valign=\"top\">\n");
-
-    container->writeQuickMemberLinks(ol,md);
-
-    ol.writeString("   </td>\n");
-    ol.writeString("   <td valign=\"top\" class=\"mempage\">\n");
-    
-    md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
-
-    ol.writeString("    </td>\n");
-    ol.writeString("  </tr>\n");
-    ol.writeString("</table>\n");
-
 
     if (generateTreeView)
     {
+      md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
       ol.endContents();
       container->writeNavigationPath(ol);
       endFile(ol,TRUE);
     }
     else
     {
+      ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"
+          "  <tr>\n"
+          "   <td valign=\"top\">\n");
+
+      container->writeQuickMemberLinks(ol,md);
+
+      ol.writeString("   </td>\n");
+      ol.writeString("   <td valign=\"top\" class=\"mempage\">\n");
+
+      md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
+
+      ol.writeString("    </td>\n");
+      ol.writeString("  </tr>\n");
+      ol.writeString("</table>\n");
+
       endFile(ol);
     }
   }
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 69e016e..39904f0 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -633,7 +633,7 @@ void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) co
           if (createSubDirs) ol.writeString("../../");
           ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
           ol.writeString("\">");
-          ol.writeString(md->localName());
+          ol.writeString(convertToHtml(md->localName()));
           ol.writeString("</a>");
         }
         ol.writeString("</td></tr>\n");
diff --git a/src/navtree.css b/src/navtree.css
index a87fa62..2166b6f 100644
--- a/src/navtree.css
+++ b/src/navtree.css
@@ -119,5 +119,9 @@
   background-color: ##FA;
 }
 
-
+@media print
+{
+  #nav-tree { display: none; }
+  div.ui-resizable-handle { display: none; position: relative; }
+}
 
diff --git a/src/navtree.js b/src/navtree.js
index 1301083..ed37aa7 100644
--- a/src/navtree.js
+++ b/src/navtree.js
@@ -1,3 +1,29 @@
+function getData(varName)
+{
+  var i = varName.lastIndexOf('/');
+  var n = i>=0 ? varName.substring(i+1) : varName;
+  return eval(n);
+}
+
+function stripPath(uri)
+{
+  return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function getScript(scriptName,func,show)
+{
+  var head = document.getElementsByTagName("head")[0]; 
+  var script = document.createElement('script');
+  script.id = scriptName;
+  script.type = 'text/javascript';
+  script.onload = func; 
+  script.src = scriptName+'.js'; 
+  script.onreadystatechange = function() {
+    if (script.readyState == 'complete') { func(); if (show) showRoot(); }
+  };
+  head.appendChild(script); 
+}
+
 function createIndent(o,domNode,node,level)
 {
   if (node.parentNode && node.parentNode.parentNode)
@@ -5,6 +31,8 @@ function createIndent(o,domNode,node,level)
     createIndent(o,domNode,node.parentNode,level+1);
   }
   var imgNode = document.createElement("img");
+  imgNode.width = 16;
+  imgNode.height = 22;
   if (level==0 && node.childrenData)
   {
     node.plus_img = imgNode;
@@ -27,7 +55,7 @@ function createIndent(o,domNode,node,level)
       } 
       else 
       {
-        expandNode(o, node, false);
+        expandNode(o, node, false, false);
       }
     }
     node.expandToggle.appendChild(imgNode);
@@ -104,10 +132,38 @@ function newNode(o, po, text, link, childrenData, lastNode)
   var a = document.createElement("a");
   node.labelSpan.appendChild(a);
   node.label = document.createTextNode(text);
+  node.expanded = false;
   a.appendChild(node.label);
   if (link) 
   {
-    a.href = node.relpath+link;
+    a.className = stripPath(link.replace('#',':'));
+    if (link.indexOf('#')!=-1)
+    {
+      var aname = '#'+link.split('#')[1];
+      var srcPage = stripPath($(location).attr('pathname'));
+      var targetPage = stripPath(link.split('#')[0]);
+      a.href = srcPage!=targetPage ? node.relpath+link : '#';
+      a.onclick = function(){
+        $('.item').removeClass('selected');
+        $('.item').removeAttr('id');
+        $(a).parent().parent().addClass('selected');
+        $(a).parent().parent().attr('id','selected');
+        var anchor = $(aname);
+        var targetDiv = anchor.next();
+        $(targetDiv).children('.memproto,.memdoc').effect("highlight",{},3000);
+        $("#doc-content").animate({
+          scrollTop: anchor.position().top +
+          $('#doc-content').scrollTop() -
+          $('#doc-content').offset().top
+        },500,function(){
+          $(location).attr('href',aname);
+        });
+      };
+    }
+    else
+    {
+      a.href = node.relpath+link;
+    }
   } 
   else 
   {
@@ -116,7 +172,6 @@ function newNode(o, po, text, link, childrenData, lastNode)
       a.className = "nolink";
       a.href = "javascript:void(0)";
       a.onclick = node.expandToggle.onclick;
-      node.expanded = false;
     }
   }
 
@@ -141,34 +196,128 @@ function showRoot()
   var headerHeight = $("#top").height();
   var footerHeight = $("#nav-path").height();
   var windowHeight = $(window).height() - headerHeight - footerHeight;
-  navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+  (function (){ // retry until we can scroll to the selected item
+    try {
+      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+    } catch (err) {
+      setTimeout(arguments.callee, 0);
+    }
+  })();
 }
 
-function expandNode(o, node, imm)
+function expandNode(o, node, imm, showRoot)
 {
   if (node.childrenData && !node.expanded) 
   {
-    if (!node.childrenVisited) 
+    if (typeof(node.childrenData)==='string')
     {
-      getNode(o, node);
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        expandNode(o, node, imm, showRoot);
+      }, showRoot);
     }
-    if (imm)
-    {
-      $(node.getChildrenUL()).show();
-    } 
-    else 
+    else
     {
-      $(node.getChildrenUL()).slideDown("fast",showRoot);
+      if (!node.childrenVisited) 
+      {
+        getNode(o, node);
+      }
+      if (imm)
+      {
+        $(node.getChildrenUL()).show();
+      } 
+      else 
+      {
+        $(node.getChildrenUL()).slideDown("fast");
+      }
+      if (node.isLast)
+      {
+        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+      }
+      else
+      {
+        node.plus_img.src = node.relpath+"ftv2mnode.png";
+      }
+      node.expanded = true;
     }
-    if (node.isLast)
+  }
+}
+
+function showNode(o, node, index)
+{
+  if (node.childrenData && !node.expanded) 
+  {
+    if (typeof(node.childrenData)==='string')
     {
-      node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        showNode(o,node,index);
+      },true);
     }
     else
     {
-      node.plus_img.src = node.relpath+"ftv2mnode.png";
+      if (!node.childrenVisited) 
+      {
+        getNode(o, node);
+      }
+      $(node.getChildrenUL()).show();
+      if (node.isLast)
+      {
+        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+      }
+      else
+      {
+        node.plus_img.src = node.relpath+"ftv2mnode.png";
+      }
+      node.expanded = true;
+      var n = node.children[o.breadcrumbs[index]];
+      if (index+1<o.breadcrumbs.length)
+      {
+        showNode(o,n,index+1);
+      }
+      else
+      {
+        if (typeof(n.childrenData)==='string')
+        {
+          var varName = n.childrenData;
+          getScript(n.relpath+varName,function(){
+            n.childrenData = getData(varName);
+            node.expanded=false;
+            showNode(o,node,index); // retry with child node expanded
+          },true);
+        }
+        else
+        {
+          if (o.toroot=="index.html" || n.childrenData)
+          {
+            expandNode(o, n, true, true);
+          }
+          var a;
+          if ($(location).attr('hash'))
+          {
+            var link=stripPath($(location).attr('pathname'))+':'+
+                     $(location).attr('hash').substring(1);
+            a=$('.item a[class*=\""'+link+'"\"]');
+          }
+          if (a && a.length)
+          {
+            a.parent().parent().addClass('selected');
+            a.parent().parent().attr('id','selected');
+            var anchor = $($(location).attr('hash'));
+            var targetDiv = anchor.next();
+            $(targetDiv).children('.memproto,.memdoc').
+                     effect("highlight", {}, 3000);
+          }
+          else
+          {
+            $(n.itemDiv).addClass('selected');
+            $(n.itemDiv).attr('id','selected');
+          }
+        }
+      }
     }
-    node.expanded = true;
   }
 }
 
@@ -180,33 +329,10 @@ function getNode(o, po)
   {
     var nodeData = po.childrenData[i];
     po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
-        i==l);
+      i==l);
   }
 }
 
-function findNavTreePage(url, data)
-{
-  var nodes = data;
-  var result = null;
-  for (var i in nodes) 
-  {
-    var d = nodes[i];
-    if (d[1] == url) 
-    {
-      return new Array(i);
-    }
-    else if (d[2] != null) // array of children
-    {
-      result = findNavTreePage(url, d[2]);
-      if (result != null) 
-      {
-        return (new Array(i).concat(result));
-      }
-    }
-  }
-  return null;
-}
-
 function initNavTree(toroot,relpath)
 {
   var o = new Object();
@@ -220,26 +346,23 @@ function initNavTree(toroot,relpath)
   o.node.li.appendChild(o.node.childrenUL);
   o.node.depth = 0;
   o.node.relpath = relpath;
+  o.node.expanded = false;
+  o.node.isLast = true;
+  o.node.plus_img = document.createElement("img");
+  o.node.plus_img.src = relpath+"ftv2pnode.png";
+  o.node.plus_img.width = 16;
+  o.node.plus_img.height = 22;
 
-  getNode(o, o.node);
-
-  o.breadcrumbs = findNavTreePage(toroot, NAVTREE);
-  if (o.breadcrumbs == null)
-  {
-    o.breadcrumbs = findNavTreePage("index.html",NAVTREE);
-  }
-  if (o.breadcrumbs != null && o.breadcrumbs.length>0)
-  {
-    var p = o.node;
-    for (var i in o.breadcrumbs) 
-    {
-      var j = o.breadcrumbs[i];
-      p = p.children[j];
-      expandNode(o,p,true);
+  getScript(relpath+"navtreeindex",function(){
+    var navTreeIndex = eval('NAVTREEINDEX');
+    if (navTreeIndex) {
+      o.breadcrumbs = navTreeIndex[toroot];
+      if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex["index.html"];
+      o.breadcrumbs.unshift(0);
+      showNode(o, o.node, 0);
     }
-    p.itemDiv.className = p.itemDiv.className + " selected";
-    p.itemDiv.id = "selected";
-    $(window).load(showRoot);
-  }
+  },true);
+
+  $(window).load(showRoot);
 }
 
diff --git a/src/navtree_css.h b/src/navtree_css.h
index 57f119f..82955e2 100644
--- a/src/navtree_css.h
+++ b/src/navtree_css.h
@@ -119,5 +119,9 @@
 "  background-color: ##FA;\n"
 "}\n"
 "\n"
-"\n"
+"@media print\n"
+"{\n"
+"  #nav-tree { display: none; }\n"
+"  div.ui-resizable-handle { display: none; position: relative; }\n"
+"}\n"
 "\n"
diff --git a/src/navtree_js.h b/src/navtree_js.h
index 8e81d55..6456eb6 100644
--- a/src/navtree_js.h
+++ b/src/navtree_js.h
@@ -1,3 +1,29 @@
+"function getData(varName)\n"
+"{\n"
+"  var i = varName.lastIndexOf('/');\n"
+"  var n = i>=0 ? varName.substring(i+1) : varName;\n"
+"  return eval(n);\n"
+"}\n"
+"\n"
+"function stripPath(uri)\n"
+"{\n"
+"  return uri.substring(uri.lastIndexOf('/')+1);\n"
+"}\n"
+"\n"
+"function getScript(scriptName,func,show)\n"
+"{\n"
+"  var head = document.getElementsByTagName(\"head\")[0]; \n"
+"  var script = document.createElement('script');\n"
+"  script.id = scriptName;\n"
+"  script.type = 'text/javascript';\n"
+"  script.onload = func; \n"
+"  script.src = scriptName+'.js'; \n"
+"  script.onreadystatechange = function() {\n"
+"    if (script.readyState == 'complete') { func(); if (show) showRoot(); }\n"
+"  };\n"
+"  head.appendChild(script); \n"
+"}\n"
+"\n"
 "function createIndent(o,domNode,node,level)\n"
 "{\n"
 "  if (node.parentNode && node.parentNode.parentNode)\n"
@@ -5,6 +31,8 @@
 "    createIndent(o,domNode,node.parentNode,level+1);\n"
 "  }\n"
 "  var imgNode = document.createElement(\"img\");\n"
+"  imgNode.width = 16;\n"
+"  imgNode.height = 22;\n"
 "  if (level==0 && node.childrenData)\n"
 "  {\n"
 "    node.plus_img = imgNode;\n"
@@ -27,7 +55,7 @@
 "      } \n"
 "      else \n"
 "      {\n"
-"        expandNode(o, node, false);\n"
+"        expandNode(o, node, false, false);\n"
 "      }\n"
 "    }\n"
 "    node.expandToggle.appendChild(imgNode);\n"
@@ -104,10 +132,38 @@
 "  var a = document.createElement(\"a\");\n"
 "  node.labelSpan.appendChild(a);\n"
 "  node.label = document.createTextNode(text);\n"
+"  node.expanded = false;\n"
 "  a.appendChild(node.label);\n"
 "  if (link) \n"
 "  {\n"
-"    a.href = node.relpath+link;\n"
+"    a.className = stripPath(link.replace('#',':'));\n"
+"    if (link.indexOf('#')!=-1)\n"
+"    {\n"
+"      var aname = '#'+link.split('#')[1];\n"
+"      var srcPage = stripPath($(location).attr('pathname'));\n"
+"      var targetPage = stripPath(link.split('#')[0]);\n"
+"      a.href = srcPage!=targetPage ? node.relpath+link : '#';\n"
+"      a.onclick = function(){\n"
+"        $('.item').removeClass('selected');\n"
+"        $('.item').removeAttr('id');\n"
+"        $(a).parent().parent().addClass('selected');\n"
+"        $(a).parent().parent().attr('id','selected');\n"
+"        var anchor = $(aname);\n"
+"        var targetDiv = anchor.next();\n"
+"        $(targetDiv).children('.memproto,.memdoc').effect(\"highlight\",{},3000);\n"
+"        $(\"#doc-content\").animate({\n"
+"          scrollTop: anchor.position().top +\n"
+"          $('#doc-content').scrollTop() -\n"
+"          $('#doc-content').offset().top\n"
+"        },500,function(){\n"
+"          $(location).attr('href',aname);\n"
+"        });\n"
+"      };\n"
+"    }\n"
+"    else\n"
+"    {\n"
+"      a.href = node.relpath+link;\n"
+"    }\n"
 "  } \n"
 "  else \n"
 "  {\n"
@@ -116,7 +172,6 @@
 "      a.className = \"nolink\";\n"
 "      a.href = \"javascript:void(0)\";\n"
 "      a.onclick = node.expandToggle.onclick;\n"
-"      node.expanded = false;\n"
 "    }\n"
 "  }\n"
 "\n"
@@ -141,34 +196,128 @@
 "  var headerHeight = $(\"#top\").height();\n"
 "  var footerHeight = $(\"#nav-path\").height();\n"
 "  var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
-"  navtree.scrollTo('#selected',0,{offset:-windowHeight/2});\n"
+"  (function (){ // retry until we can scroll to the selected item\n"
+"    try {\n"
+"      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});\n"
+"    } catch (err) {\n"
+"      setTimeout(arguments.callee, 0);\n"
+"    }\n"
+"  })();\n"
 "}\n"
 "\n"
-"function expandNode(o, node, imm)\n"
+"function expandNode(o, node, imm, showRoot)\n"
 "{\n"
 "  if (node.childrenData && !node.expanded) \n"
 "  {\n"
-"    if (!node.childrenVisited) \n"
+"    if (typeof(node.childrenData)==='string')\n"
 "    {\n"
-"      getNode(o, node);\n"
+"      var varName    = node.childrenData;\n"
+"      getScript(node.relpath+varName,function(){\n"
+"        node.childrenData = getData(varName);\n"
+"        expandNode(o, node, imm, showRoot);\n"
+"      }, showRoot);\n"
 "    }\n"
-"    if (imm)\n"
-"    {\n"
-"      $(node.getChildrenUL()).show();\n"
-"    } \n"
-"    else \n"
+"    else\n"
 "    {\n"
-"      $(node.getChildrenUL()).slideDown(\"fast\",showRoot);\n"
+"      if (!node.childrenVisited) \n"
+"      {\n"
+"        getNode(o, node);\n"
+"      }\n"
+"      if (imm)\n"
+"      {\n"
+"        $(node.getChildrenUL()).show();\n"
+"      } \n"
+"      else \n"
+"      {\n"
+"        $(node.getChildrenUL()).slideDown(\"fast\");\n"
+"      }\n"
+"      if (node.isLast)\n"
+"      {\n"
+"        node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
+"      }\n"
+"      else\n"
+"      {\n"
+"        node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
+"      }\n"
+"      node.expanded = true;\n"
 "    }\n"
-"    if (node.isLast)\n"
+"  }\n"
+"}\n"
+"\n"
+"function showNode(o, node, index)\n"
+"{\n"
+"  if (node.childrenData && !node.expanded) \n"
+"  {\n"
+"    if (typeof(node.childrenData)==='string')\n"
 "    {\n"
-"      node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
+"      var varName    = node.childrenData;\n"
+"      getScript(node.relpath+varName,function(){\n"
+"        node.childrenData = getData(varName);\n"
+"        showNode(o,node,index);\n"
+"      },true);\n"
 "    }\n"
 "    else\n"
 "    {\n"
-"      node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
+"      if (!node.childrenVisited) \n"
+"      {\n"
+"        getNode(o, node);\n"
+"      }\n"
+"      $(node.getChildrenUL()).show();\n"
+"      if (node.isLast)\n"
+"      {\n"
+"        node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
+"      }\n"
+"      else\n"
+"      {\n"
+"        node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
+"      }\n"
+"      node.expanded = true;\n"
+"      var n = node.children[o.breadcrumbs[index]];\n"
+"      if (index+1<o.breadcrumbs.length)\n"
+"      {\n"
+"        showNode(o,n,index+1);\n"
+"      }\n"
+"      else\n"
+"      {\n"
+"        if (typeof(n.childrenData)==='string')\n"
+"        {\n"
+"          var varName = n.childrenData;\n"
+"          getScript(n.relpath+varName,function(){\n"
+"            n.childrenData = getData(varName);\n"
+"            node.expanded=false;\n"
+"            showNode(o,node,index); // retry with child node expanded\n"
+"          },true);\n"
+"        }\n"
+"        else\n"
+"        {\n"
+"          if (o.toroot==\"index.html\" || n.childrenData)\n"
+"          {\n"
+"            expandNode(o, n, true, true);\n"
+"          }\n"
+"          var a;\n"
+"          if ($(location).attr('hash'))\n"
+"          {\n"
+"            var link=stripPath($(location).attr('pathname'))+':'+\n"
+"                     $(location).attr('hash').substring(1);\n"
+"            a=$('.item a[class*=\\\"\"'+link+'\"\\\"]');\n"
+"          }\n"
+"          if (a && a.length)\n"
+"          {\n"
+"            a.parent().parent().addClass('selected');\n"
+"            a.parent().parent().attr('id','selected');\n"
+"            var anchor = $($(location).attr('hash'));\n"
+"            var targetDiv = anchor.next();\n"
+"            $(targetDiv).children('.memproto,.memdoc').\n"
+"                     effect(\"highlight\", {}, 3000);\n"
+"          }\n"
+"          else\n"
+"          {\n"
+"            $(n.itemDiv).addClass('selected');\n"
+"            $(n.itemDiv).attr('id','selected');\n"
+"          }\n"
+"        }\n"
+"      }\n"
 "    }\n"
-"    node.expanded = true;\n"
 "  }\n"
 "}\n"
 "\n"
@@ -180,33 +329,10 @@
 "  {\n"
 "    var nodeData = po.childrenData[i];\n"
 "    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],\n"
-"        i==l);\n"
+"      i==l);\n"
 "  }\n"
 "}\n"
 "\n"
-"function findNavTreePage(url, data)\n"
-"{\n"
-"  var nodes = data;\n"
-"  var result = null;\n"
-"  for (var i in nodes) \n"
-"  {\n"
-"    var d = nodes[i];\n"
-"    if (d[1] == url) \n"
-"    {\n"
-"      return new Array(i);\n"
-"    }\n"
-"    else if (d[2] != null) // array of children\n"
-"    {\n"
-"      result = findNavTreePage(url, d[2]);\n"
-"      if (result != null) \n"
-"      {\n"
-"        return (new Array(i).concat(result));\n"
-"      }\n"
-"    }\n"
-"  }\n"
-"  return null;\n"
-"}\n"
-"\n"
 "function initNavTree(toroot,relpath)\n"
 "{\n"
 "  var o = new Object();\n"
@@ -220,26 +346,23 @@
 "  o.node.li.appendChild(o.node.childrenUL);\n"
 "  o.node.depth = 0;\n"
 "  o.node.relpath = relpath;\n"
+"  o.node.expanded = false;\n"
+"  o.node.isLast = true;\n"
+"  o.node.plus_img = document.createElement(\"img\");\n"
+"  o.node.plus_img.src = relpath+\"ftv2pnode.png\";\n"
+"  o.node.plus_img.width = 16;\n"
+"  o.node.plus_img.height = 22;\n"
 "\n"
-"  getNode(o, o.node);\n"
-"\n"
-"  o.breadcrumbs = findNavTreePage(toroot, NAVTREE);\n"
-"  if (o.breadcrumbs == null)\n"
-"  {\n"
-"    o.breadcrumbs = findNavTreePage(\"index.html\",NAVTREE);\n"
-"  }\n"
-"  if (o.breadcrumbs != null && o.breadcrumbs.length>0)\n"
-"  {\n"
-"    var p = o.node;\n"
-"    for (var i in o.breadcrumbs) \n"
-"    {\n"
-"      var j = o.breadcrumbs[i];\n"
-"      p = p.children[j];\n"
-"      expandNode(o,p,true);\n"
+"  getScript(relpath+\"navtreeindex\",function(){\n"
+"    var navTreeIndex = eval('NAVTREEINDEX');\n"
+"    if (navTreeIndex) {\n"
+"      o.breadcrumbs = navTreeIndex[toroot];\n"
+"      if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex[\"index.html\"];\n"
+"      o.breadcrumbs.unshift(0);\n"
+"      showNode(o, o.node, 0);\n"
 "    }\n"
-"    p.itemDiv.className = p.itemDiv.className + \" selected\";\n"
-"    p.itemDiv.id = \"selected\";\n"
-"    $(window).load(showRoot);\n"
-"  }\n"
+"  },true);\n"
+"\n"
+"  $(window).load(showRoot);\n"
 "}\n"
 "\n"
diff --git a/src/outputgen.h b/src/outputgen.h
index acbaef9..740940e 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -301,6 +301,7 @@ class OutputGenerator : public BaseOutputDocInterface
     ///////////////////////////////////////////////////////////////
     virtual void startFile(const char *name,const char *manName,
                            const char *title) = 0;
+    virtual void writeSearchInfo() = 0;
     virtual void writeFooter() = 0;
     virtual void endFile() = 0;
     virtual void startIndexSection(IndexSections) = 0;
diff --git a/src/outputlist.h b/src/outputlist.h
index debea2e..e832175 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -85,6 +85,8 @@ class OutputList : public OutputDocInterface
     { forall(&OutputGenerator::writeStyleInfo,part); }
     void startFile(const char *name,const char *manName,const char *title)
     { forall(&OutputGenerator::startFile,name,manName,title); }
+    void writeSearchInfo()
+    { forall(&OutputGenerator::writeSearchInfo); }
     void writeFooter()
     { forall(&OutputGenerator::writeFooter); }
     void endFile() 
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index dc78179..5786bc1 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -98,7 +98,7 @@ void PageDef::writeDocumentation(OutputList &ol)
   {
     if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
     {
-      getOuterScope()->writeNavigationPath(ol);
+      getOuterScope()->writeNavigationPath(ol,FALSE);
     }
     ol.endQuickIndices();
   }
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 443e24b..ebe09e8 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -1703,7 +1703,7 @@ void PerlModGenerator::generatePerlModForClass(ClassDef *cd)
     m_output.closeList();
   }
 
-  ClassSDict *cl = cd->getInnerClasses();
+  ClassSDict *cl = cd->getClassSDict();
   if (cl)
   {
     m_output.openList("inner");
diff --git a/src/pre.l b/src/pre.l
index d4b5002..b962711 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -205,6 +205,13 @@ static bool macroIsAccessible(Define *def)
     //       g_inputFileDef->name().data(),def->name.data(),def->fileDef->name().data(),b);
     return b;
   }
+  if (g_inputFileDef && def && !def->fileName.isEmpty())
+  {
+    bool b = g_inputFileDef->includesByName(def->fileName);
+    //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
+    //       g_inputFileDef->name().data(),def->name.data(),def->fileName.data(),b);
+    return b;
+  }
   //printf("not accessible!\n");
   return FALSE;
 }
@@ -215,11 +222,10 @@ static Define *isDefined(const char *name)
   if (name)
   {
     def=g_globalDefineDict->find(name);
-    //if ((def=fileDefineCache->findDefine(g_yyFileName,name)) && !def->undef) 
-    //	return def;
     if (def && def->undef) def=0;
     if (def && !macroIsAccessible(def)) def=0;
   }
+  //printf("isDefined(%s)=%p\n",name,def);
   return def;
 }
 
@@ -786,20 +792,22 @@ static int getNextId(const QCString &expr,int p,int *l)
     }
     else if (c=='/') // skip C Comment
     {
+      //printf("Found C comment at p=%d\n",p);
       char pc=c;
       if (p<(int)expr.length()) 
       {
-	c=expr.at(++p);
+	c=expr.at(p);
         if (c=='*')  // Start of C comment
         { 
+	  p++;
   	  while (p<(int)expr.length() && !(pc=='*' && c=='/'))
 	  {
 	    pc=c;
-	    c=expr.at(++p);
+	    c=expr.at(p++);
 	  }
-	  p++;
         }
       }
+      //printf("Found end of C comment at p=%d\n",p);
     }
   }
   return -1;
@@ -822,6 +830,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
   {
     bool replaced=FALSE;
     macroName=expr.mid(p,l);
+    //printf("macroName=%s\n",macroName.data());
     if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker?
     {
       if (g_expandedDict->find(macroName)==0) // expand macro
@@ -1138,8 +1147,8 @@ Define *newDefine()
   def->fileDef    = g_yyFileDef;
   def->lineNr     = g_yyLineNr;
   def->varArgs    = g_defVarArgs;
-  //printf("newDefine: %s->%s\n",def->name.data(),
-  //    def->fileDef ? def->fileDef->name().data() : "<none>");
+  //printf("newDefine: %s %s file: %s\n",def->name.data(),def->definition.data(),
+  //    def->fileDef ? def->fileDef->name().data() : def->fileName.data());
   //printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
   if (!def->name.isEmpty() && Doxygen::expandAsDefinedDict[def->name])
   {
@@ -1218,7 +1227,8 @@ static inline void outputArray(const char *a,int len)
 
 static void readIncludeFile(const QCString &inc)
 {
-  if (!Config_getBool("SEARCH_INCLUDES")) return; // do not read include files
+  static bool searchIncludes = Config_getBool("SEARCH_INCLUDES");
+  if (!searchIncludes) return; // do not read include files
   uint i=0;
 
   // find the start of the include file name
@@ -1250,6 +1260,22 @@ static void readIncludeFile(const QCString &inc)
     int oldLineNr        = g_yyLineNr;
     //printf("Searching for `%s'\n",incFileName.data());
 
+    // absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336)
+    QCString absIncFileName = incFileName;
+    {
+      QFileInfo fi(g_yyFileName);
+      if (fi.exists())
+      {
+	QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+incFileName;
+        QFileInfo fi2(absName);
+        if (fi2.exists())
+        {
+	  absIncFileName=fi2.absFilePath();
+        }
+        //printf( "absIncFileName = %s\n", absIncFileName.data() );
+      }
+    }
+
     // findFile will overwrite g_yyFileDef if found
     FileState *fs;
     bool alreadyIncluded = FALSE;
@@ -1266,9 +1292,9 @@ static void readIncludeFile(const QCString &inc)
       {
         // add include dependency to the file in which the #include was found
 	bool ambig;
-	// change to local name for bug 641336 
-        FileDef *incFd = findFileDef(Doxygen::inputNameDict,incFileName,ambig);
-        oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported);
+	// change to absolute name for bug 641336 
+        FileDef *incFd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
+        oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported,FALSE);
         // add included by dependency
         if (g_yyFileDef)
         {
@@ -1276,6 +1302,10 @@ static void readIncludeFile(const QCString &inc)
           g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
         }
       }
+      else if (g_inputFileDef)
+      {
+        g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
+      }
       fs->bufState = YY_CURRENT_BUFFER;
       fs->lineNr   = oldLineNr;
       fs->fileName = oldFileName;
@@ -1308,11 +1338,11 @@ static void readIncludeFile(const QCString &inc)
 	//  //printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data());
 	//}
 
-	// change to local name for bug 641336 
-	FileDef *fd = findFileDef(Doxygen::inputNameDict,incFileName,ambig);
+	// change to absolute name for bug 641336 
+	FileDef *fd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
 	//printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd);
 	// add include dependency to the file in which the #include was found
-	oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported);
+	oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported,FALSE);
 	// add included by dependency
         if (fd)
         {
@@ -1320,6 +1350,10 @@ static void readIncludeFile(const QCString &inc)
           fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
         }
       }
+      else if (g_inputFileDef)
+      {
+        g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
+      }
       if (Debug::isFlagSet(Debug::Preprocessor))
       {
         msg("#include %s: not found or already included! skipping...\n",incFileName.data());
@@ -1957,7 +1991,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  g_defExtraSpacing.resize(0);
 					  BEGIN(DefineArg);
   					}
-<DefName>{ID}{B}+"1"			{ // special case: define with 1 -> can be "guard"
+<DefName>{ID}{B}+"1"/[ \r\t\n]		{ // special case: define with 1 -> can be "guard"
   					  //printf("Define `%s'\n",yytext);
   					  g_argDict = 0;
 					  g_defArgs = -1;
@@ -2340,7 +2374,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
   					    BEGIN(SkipSingleQuote);
 					  }
 					}
-<SkipDoubleQuote>"//"			{ g_defText += yytext; g_defLitText+=yytext; }
+<SkipDoubleQuote>"//"[/]?		{ g_defText += yytext; g_defLitText+=yytext; }
 <SkipDoubleQuote>"/*"			{ g_defText += yytext; g_defLitText+=yytext; }
 <SkipDoubleQuote>\"			{
   					  g_defText += *yytext; g_defLitText+=yytext; 
diff --git a/src/qhp.cpp b/src/qhp.cpp
index 07230d9..bba308a 100644
--- a/src/qhp.cpp
+++ b/src/qhp.cpp
@@ -173,7 +173,8 @@ void Qhp::decContentsDepth()
 
 void Qhp::addContentsItem(bool /*isDir*/, const char * name, 
                           const char * /*ref*/, const char * file, 
-                          const char * /*anchor*/)
+                          const char * /*anchor*/,bool /* separateIndex */,
+                          bool /* addToNavIndex */)
 {
   // Backup difference before modification
   int diff = m_prevSectionLevel - m_sectionLevel;
diff --git a/src/qhp.h b/src/qhp.h
index e5b4a08..8185803 100644
--- a/src/qhp.h
+++ b/src/qhp.h
@@ -32,7 +32,8 @@ class Qhp : public IndexIntf
     void incContentsDepth();
     void decContentsDepth();
     void addContentsItem(bool isDir, const char * name, const char * ref,
-                         const char * file, const char * anchor);
+                         const char * file, const char * anchor,
+                         bool separateIndex,bool addToNavIndex);
     void addIndexItem(Definition *context,MemberDef *md,const char *title);
     void addIndexFile(const char * name);
     void addImageFile(const char * name);
diff --git a/src/rtfgen.h b/src/rtfgen.h
index 406519c..33798d5 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -43,6 +43,7 @@ class RTFGenerator : public OutputGenerator
     void printDoc(DocNode *,const char *);
 
     void startFile(const char *name,const char *manName,const char *title);
+    void writeSearchInfo() {}
     void writeFooter() {}
     void endFile();
     void clearBuffer();
diff --git a/src/svgpan.js b/src/svgpan.js
index da381fd..7c0c916 100644
--- a/src/svgpan.js
+++ b/src/svgpan.js
@@ -173,30 +173,15 @@ function handleMouseWheel(evt)
 
   if (state!='pan')
   {
-
     var delta;
-
-    if(evt.wheelDelta)
+    if (evt.wheelDelta)
     {
-      if (window.opera)
-      {
-        delta = evt.wheelDelta / 720; // Opera
-      }
-      else if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1 ||
-               navigator.appVersion.indexOf("MSIE") != -1)
-      {
-        delta = evt.wheelDelta / 7200; // Chrome/IE9
-      }
-      else
-      {
-        delta = evt.wheelDelta / 72000; // Safari
-      }
+      delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari
     }
     else
     {
       delta = evt.detail / -180; // Mozilla
     }
-
     var svgDoc = evt.target.ownerDocument;
     var g = svgDoc.getElementById("viewport");
     var p = getEventPoint(evt);
diff --git a/src/svgpan_js.h b/src/svgpan_js.h
index ddc3eac..7cbbdfc 100644
--- a/src/svgpan_js.h
+++ b/src/svgpan_js.h
@@ -173,30 +173,15 @@
 "\n"
 "  if (state!='pan')\n"
 "  {\n"
-"\n"
 "    var delta;\n"
-"\n"
-"    if(evt.wheelDelta)\n"
+"    if (evt.wheelDelta)\n"
 "    {\n"
-"      if (window.opera)\n"
-"      {\n"
-"        delta = evt.wheelDelta / 720; // Opera\n"
-"      }\n"
-"      else if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1 ||\n"
-"               navigator.appVersion.indexOf(\"MSIE\") != -1)\n"
-"      {\n"
-"        delta = evt.wheelDelta / 7200; // Chrome/IE9\n"
-"      }\n"
-"      else\n"
-"      {\n"
-"        delta = evt.wheelDelta / 72000; // Safari\n"
-"      }\n"
+"      delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari\n"
 "    }\n"
 "    else\n"
 "    {\n"
 "      delta = evt.detail / -180; // Mozilla\n"
 "    }\n"
-"\n"
 "    var svgDoc = evt.target.ownerDocument;\n"
 "    var g = svgDoc.getElementById(\"viewport\");\n"
 "    var p = getEventPoint(evt);\n"
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 1934903..b7a7b7a 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -1374,7 +1374,7 @@ void TagFileParser::addIncludes()
                 //        ifd->getOutputFileBase().data(),ii->id.data());
                 if (ifd->getOutputFileBase()==QCString(ii->id))
                 {
-                  fd->addIncludeDependency(ifd,ii->text,ii->isLocal,ii->isImported);
+                  fd->addIncludeDependency(ifd,ii->text,ii->isLocal,ii->isImported,FALSE);
                 }
               }
             }
diff --git a/src/translator_am.h b/src/translator_am.h
index 08217ba..f935c5f 100644
--- a/src/translator_am.h
+++ b/src/translator_am.h
@@ -22,7 +22,7 @@
 #ifndef TRANSLATOR_AM_H
 #define TRANSLATOR_AM_H
 
-class TranslatorArmenian : public TranslatorAdapter_1_7_5
+class TranslatorArmenian : public Translator
 {
   public:
     /*! Used for identification of the language. */
diff --git a/src/translator_id.h b/src/translator_id.h
index b139650..f0d7afc 100644
--- a/src/translator_id.h
+++ b/src/translator_id.h
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2011 by Dimitri van Heesch.
+ * Copyright (C) 1997-2007 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
@@ -18,12 +18,13 @@
 #ifndef TRANSLATOR_ID_H
 #define TRANSLATOR_ID_H
 
-/*! 
-  Indonesian translator based on Doxygen 1.4.2.
-
-  \author Hendy Irawan <ceefour@gauldong.net>
+/** 
+ * Translasi berikut didasarkan pada versi translator_en.h dalam
+ * Doxygen 1.7.5.1.
+ *
+ * Penterjemah: Adhi Hargo <cadmus_sw at yahoo.com>
  */
-class TranslatorIndonesian : public TranslatorAdapter_1_4_6
+class TranslatorIndonesian : public Translator
 {
   public:
 
@@ -54,7 +55,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      */
     virtual QCString latexLanguageSupportCommand()
     {
-      return "\\usepackage[indonesian]{babel}";
+      return "\\usepackage[bahasa]{babel}";
     }
 
     /*! return the language charset. This will be used for the HTML output */
@@ -71,7 +72,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
 
     /*! subscript for the related functions. */
     virtual QCString trRelatedSubscript()
-    { return "(Catatan: Fungsi-fungsi tersebut bukan fungsi anggota.)"; }
+    { return "(Perhatikan bahwa fungsi-fungsi tersebut bukan fungsi anggota.)"; }
 
     /*! header that is put before the detailed description of files, classes and namespaces. */
     virtual QCString trDetailedDescription()
@@ -126,7 +127,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      *  parameter s is name of the project name.
      */
     virtual QCString trGeneratedAutomatically(const char *s)
-    { QCString result="Dihasilkan secara otomatis oleh Doxygen";
+    { QCString result="Dibangkitkan secara otomatis oleh Doxygen";
       if (s) result+=(QCString)" untuk "+s;
       result+=" dari kode sumber."; 
       return result;
@@ -154,7 +155,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
 
     /*! This is put above each page as a link to the class hierarchy */
     virtual QCString trClassHierarchy()
-    { return "Struktur Kelas"; }
+    { return "Hierarki Kelas"; }
 
     /*! This is put above each page as a link to the list of annotated classes */
     virtual QCString trCompoundList()
@@ -173,10 +174,6 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trFileList()
     { return "Daftar File"; }
 
-    /*! This is put above each page as a link to the list of all verbatim headers */
-    virtual QCString trHeaderFiles()
-    { return "File Header"; }
-
     /*! This is put above each page as a link to all members of compounds. */
     virtual QCString trCompoundMembers()
     { 
@@ -186,7 +183,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       }
       else
       {
-        return "Daftar Anggota: Kelas"; 
+        return "Daftar Anggota Kelas"; 
       }
     }
 
@@ -195,11 +192,11 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "Daftar Global"; 
+        return "Daftar Definisi Global"; 
       }
       else
       {
-        return "Daftar File"; 
+        return "Daftar Anggota File";
       }
     }
 
@@ -217,15 +214,16 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
 
     /*! This is an introduction to the class hierarchy. */
     virtual QCString trClassHierarchyDescription()
-    { return "Struktur kelas ini diurutkan hampir sepenuhnya diurutkan berdasarkan abjad:";
+    { return "Hierarki kelas ini diurutkan kurang-lebih"
+	" berdasarkan abjad:";
     }
 
     /*! This is an introduction to the list with all files. */
     virtual QCString trFileListDescription(bool extractAll)
     {
-      QCString result="Berikut ini daftar seluruh file dengan penjelasan singkat";
+      QCString result="Berikut ini daftar seluruh file";
       if (!extractAll) result+=" yang didokumentasikan";
-      result += ":";
+      result += ", dengan penjelasan singkat:";
       return result;
     }
 
@@ -235,11 +233,11 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "Berikut ini daftar struktur data beserta penjelasan singkat:"; 
+        return "Berikut ini daftar struktur data, dengan penjelasan singkat:"; 
       }
       else
       {
-        return "Berikut ini daftar kelas, struktur, gabungan, dan interface beserta penjelasan singkat:";
+        return "Berikut ini daftar kelas, struct, union, dan interface, dengan penjelasan singkat:";
       }
     }
 
@@ -249,7 +247,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       QCString result="Berikut ini daftar seluruh ";
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        result+="variabel struktur dan gabungan";
+        result+="variabel anggota struct dan union";
       }
       else
       {
@@ -259,27 +257,27 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       {
         result+=" yang didokumentasikan";
       }
-      result+=" dengan link ke ";
+      result+=", dengan tautan ke ";
       if (!extractAll) 
       {
         if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
         {
-          result+="dokumentasi struktur/gabungan untuk tiap variabel:";
+          result+="dokumentasi struct/union untuk setiap variabel:";
         }
         else
         {
-          result+="dokumentasi kelas untuk tiap anggota:";
+          result+="dokumentasi kelas untuk setiap anggota:";
         }
       }
       else 
       {
         if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
         {
-          result+="struktur/gabungan induk:";
+          result+="struct/union yang memuatnya:";
         }
         else
         {
-          result+="kelas induk:";
+          result+="kelas yang memuatnya:";
         }
       }
       return result;
@@ -292,25 +290,21 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        result+="fungsi, variabel, konstanta, enumerasi, dan tipe";
+        result+="fungsi, variabel, makro definisi, enumerasi, dan tipe";
       }
       else
       {
         result+="file";
       }
       if (!extractAll) result+=" yang didokumentasikan";
-      result+=" dengan link ke ";
+      result+=", dengan tautan ke ";
       if (extractAll) 
-        result+="file induk:";
+        result+="file yang memuatnya:";
       else 
-        result+="dokumentasi:";
+        result+="dokumentasinya:";
       return result;
     }
 
-    /*! This is an introduction to the page with the list of all header files. */
-    virtual QCString trHeaderFilesDescription()
-    { return "Berikut ini daftar file header yang melingkupi API (Application Programming Interface) ini:"; }
-
     /*! This is an introduction to the page with the list of all examples */
     virtual QCString trExamplesDescription()
     { return "Berikut ini daftar semua contoh:"; }
@@ -323,15 +317,8 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trModulesDescription()
     { return "Berikut ini daftar semua modul:"; }
 
-    /*! This sentences is used in the annotated class/file lists if no brief
-     * description is given. 
-     */
-    virtual QCString trNoDescriptionAvailable()
-    { return "Tidak ada keterangan tersedia"; }
-
     // index titles (the project name is prepended for these) 
 
-
     /*! This is used in HTML as the title of index.html. */
     virtual QCString trDocumentation()
     { return "Dokumentasi"; }
@@ -346,7 +333,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      * class hierarchy.
      */
     virtual QCString trHierarchicalIndex()
-    { return "Indeks Struktur Kelas"; }
+    { return "Indeks Hierarki Kelas"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * annotated compound index.
@@ -410,13 +397,13 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
 
     /*! This is used in LaTeX as the title of the document */
     virtual QCString trReferenceManual()
-    { return "Dokumentasi Referensi"; }
+    { return "Dokumen Referensi"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of defines
      */
     virtual QCString trDefines()
-    { return "Konstanta"; }
+    { return "Makro Definisi"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of function prototypes
@@ -458,7 +445,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      *  documentation blocks for defines
      */
     virtual QCString trDefineDocumentation()
-    { return "Dokumentasi Konstanta"; }
+    { return "Dokumentasi Makro Definisi"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for function prototypes
@@ -479,12 +466,6 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     { return "Dokumentasi Tipe Enumerasi"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
-     *  of documentation blocks for enumeration values
-     */
-    virtual QCString trEnumerationValueDocumentation()
-    { return "Dokumentasi Nilai Enumerasi"; }
-
-    /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for functions
      */
     virtual QCString trFunctionDocumentation()
@@ -516,7 +497,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      */
     virtual QCString trGeneratedAt(const char *date,const char *projName)
     { 
-      QCString result=(QCString)"Dihasilkan pada tanggal "+date;
+      QCString result=(QCString)"Dibangkitkan pada tanggal "+date;
       if (projName) result+=(QCString)" untuk "+projName;
       result+=(QCString)" oleh";
       return result;
@@ -531,25 +512,17 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! this text is put before a class diagram */
     virtual QCString trClassDiagram(const char *clName)
     {
-      return (QCString)"Diagram struktur kelas untuk "+clName+":";
+      return (QCString)"Diagram hierarki kelas untuk "+clName+":";
     }
 
     /*! this text is generated when the \\internal command is used. */
     virtual QCString trForInternalUseOnly()
-    { return "Untuk kalangan sendiri."; }
-
-    /*! this text is generated when the \\reimp command is used. */
-    virtual QCString trReimplementedForInternalReasons()
-    { return "Di-reimplementasikan karena alasan internal; API tidak berubah."; }
+    { return "Hanya untuk digunakan secara internal."; }
 
     /*! this text is generated when the \\warning command is used. */
     virtual QCString trWarning()
     { return "Peringatan"; }
 
-    /*! this text is generated when the \\bug command is used. */
-    virtual QCString trBugsAndLimitations()
-    { return "Bug dan keterbatasan"; }
-
     /*! this text is generated when the \\version command is used. */
     virtual QCString trVersion()
     { return "Versi"; }
@@ -572,15 +545,15 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
 
     /*! this text is generated when the \\exception command is used. */
     virtual QCString trExceptions()
-    { return "Exception"; }
+    { return "Eksepsi"; }
 
     /*! this text is used in the title page of a LaTeX document. */
     virtual QCString trGeneratedBy()
-    { return "Dihasilkan oleh"; }
+    { return "Dibangkitkan oleh"; }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-990307
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990307
+//////////////////////////////////////////////////////////////////////////
 
     /*! used as the title of page containing all the index of all namespaces. */
     virtual QCString trNamespaceList()
@@ -589,9 +562,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! used as an introduction to the namespace list */
     virtual QCString trNamespaceListDescription(bool extractAll)
     {
-      QCString result="Berikut ini daftar namespace beserta keterangan singkat";
+      QCString result="Berikut ini daftar namespace";
       if (!extractAll) result+=" yang didokumentasikan";
-      result+=":";
+      result+=", dengan keterangan singkat:";
       return result;
     }
 
@@ -601,9 +574,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trFriends()
     { return "Friend"; }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-990405
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990405
+//////////////////////////////////////////////////////////////////////////
 
     /*! used in the class documentation as a header before the list of all
      * related classes 
@@ -611,44 +584,44 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trRelatedFunctionDocumentation()
     { return "Dokumentasi Friend Dan Fungsi Terkait"; }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-990425
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990425
+//////////////////////////////////////////////////////////////////////////
 
     /*! used as the title of the HTML page of a class/struct/union */
     virtual QCString trCompoundReference(const char *clName,
         ClassDef::CompoundType compType,
         bool isTemplate)
     {
-      QCString result=(QCString)clName;
+      QCString result="Referensi";
       switch(compType)
       {
-        case ClassDef::Class:      result+=" Kelas"; break;
-        case ClassDef::Struct:     result+=" Struktur"; break;
-        case ClassDef::Union:      result+=" Gabungan"; break;
-        case ClassDef::Interface:  result+=" Interface"; break;
-        case ClassDef::Protocol:   result+=" Protokol"; break;
-        case ClassDef::Category:   result+=" Kategori"; break;
-        case ClassDef::Exception:  result+=" Exception"; break;
+        case ClassDef::Class:      result+=" Kelas "; break;
+        case ClassDef::Struct:     result+=" Struct "; break;
+        case ClassDef::Union:      result+=" Union "; break;
+        case ClassDef::Interface:  result+=" Interface "; break;
+        case ClassDef::Protocol:   result+=" Protokol "; break;
+        case ClassDef::Category:   result+=" Kategori "; break;
+        case ClassDef::Exception:  result+=" Eksepsi "; break;
       }
-      if (isTemplate) result+=" Template";
-      result+=" Referensi";
+      if (isTemplate) result+=" Template ";
+      result+=(QCString)clName;
       return result;
     }
 
     /*! used as the title of the HTML page of a file */
     virtual QCString trFileReference(const char *fileName)
     {
-      QCString result=fileName;
-      result+=" Referensi File"; 
+      QCString result="Referensi File ";
+      result+=fileName; 
       return result;
     }
 
     /*! used as the title of the HTML page of a namespace */
     virtual QCString trNamespaceReference(const char *namespaceName)
     {
-      QCString result=namespaceName;
-      result+=" Referensi Namespace";
+      QCString result="Referensi Namespace ";
+      result+=namespaceName;
       return result;
     }
 
@@ -727,7 +700,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      */
     virtual QCString trReimplementedInList(int numEntries)
     {
-      return "Di-reimplementasikan di "+trWriteList(numEntries)+".";
+      return "Diimplementasikan ulang di "+trWriteList(numEntries)+".";
     }
 
     /*! This is put above each page as a link to all members of namespaces. */
@@ -737,13 +710,13 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! This is an introduction to the page with all namespace members */
     virtual QCString trNamespaceMemberDescription(bool extractAll)
     { 
-      QCString result="Berikut ini daftar anggota namespace ";
-      if (!extractAll) result+="yang didokumentasikan ";
-      result+="dengan link ke ";
+      QCString result="Berikut ini daftar anggota namespace";
+      if (!extractAll) result+=" yang didokumentasikan";
+      result+=", dengan tautan ke ";
       if (extractAll) 
-        result+="dokumentasi namespace untuk tiap anggota:";
+        result+="dokumentasi namespace untuk setiap anggota:";
       else 
-        result+="namespace induk:";
+        result+="namespace yang memuatnya:";
       return result;
     }
     /*! This is used in LaTeX as the title of the chapter with the 
@@ -758,9 +731,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trNamespaceDocumentation()
     { return "Dokumentasi Namespace"; }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-990522
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990522
+//////////////////////////////////////////////////////////////////////////
 
     /*! This is used in the documentation before the list of all
      *  namespaces in a file.
@@ -768,9 +741,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trNamespaces()
     { return "Daftar Namespace"; }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-990728
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990728
+//////////////////////////////////////////////////////////////////////////
 
     /*! This is put at the bottom of a class documentation page and is
      *  followed by a list of files that were used to generate the page.
@@ -783,14 +756,14 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       switch(compType)
       {
         case ClassDef::Class:      result+="kelas"; break;
-        case ClassDef::Struct:     result+="struktur"; break;
-        case ClassDef::Union:      result+="gabungan"; break;
+        case ClassDef::Struct:     result+="struct"; break;
+        case ClassDef::Union:      result+="union"; break;
         case ClassDef::Interface:  result+="interface"; break;
         case ClassDef::Protocol:   result+="protokol"; break;
         case ClassDef::Category:   result+="kategori"; break;
-        case ClassDef::Exception:  result+="exception"; break;
+        case ClassDef::Exception:  result+="eksepsi"; break;
       }
-      result+=" ini dihasilkan dari file";
+      result+=" ini dibangkitkan dari file";
       result+=single ? "" : "-file";
       result+=" berikut:";
       return result;
@@ -802,9 +775,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trAlphabeticalList()
     { return "Daftar Berdasarkan Abjad"; }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-990901
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990901
+//////////////////////////////////////////////////////////////////////////
 
     /*! This is used as the heading text for the retval command. */
     virtual QCString trReturnValues()
@@ -821,35 +794,31 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trPageAbbreviation()
     { return "hal."; }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-991003
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991003
+//////////////////////////////////////////////////////////////////////////
 
-    virtual QCString trSources()
-    {
-      return "Sumber";
-    }
     virtual QCString trDefinedAtLineInSourceFile()
     {
-      return "Definisi pada baris @0 di file @1.";
+      return "Definisi pada baris @0 dalam file @1.";
     }
     virtual QCString trDefinedInSourceFile()
     {
-      return "Definisi pada baris @0.";
+      return "Definisi dalam file @0.";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 0.49-991205
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991205
+//////////////////////////////////////////////////////////////////////////
 
     virtual QCString trDeprecated()
     {
       return "Kadaluarsa";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.0.0
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.0.0
+//////////////////////////////////////////////////////////////////////////
 
     /*! this text is put before a collaboration diagram */
     virtual QCString trCollaborationDiagram(const char *clName)
@@ -859,7 +828,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! this text is put before an include dependency graph */
     virtual QCString trInclDepGraph(const char *fName)
     {
-      return (QCString)"Diagram ketergantungan untuk "+fName+":";
+      return (QCString)"Bagan kebergantungan pemuatan untuk "+fName+":";
     }
     /*! header that is put before the list of constructor/destructors. */
     virtual QCString trConstructorDocumentation()
@@ -889,7 +858,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! Text for the \\invariant command */
     virtual QCString trInvariant()
     {
-      return "Invariant";
+      return "Invarian";
     }
     /*! Text shown before a multi-line variable/enum initialization */
     virtual QCString trInitialValue()
@@ -903,24 +872,24 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     }
     virtual QCString trGraphicalHierarchy()
     {
-      return "Struktur Kelas Berbasis Grafis";
+      return "Hierarki Kelas Secara Grafis";
     }
     virtual QCString trGotoGraphicalHierarchy()
     {
-      return "Ke struktur kelas berbasis grafis";
+      return "Ke bagan grafis hierarki kelas";
     }
     virtual QCString trGotoTextualHierarchy()
     {
-      return "Ke struktur kelas berbasis teks";
+      return "Ke bagan tekstual hierarki kelas";
     }
     virtual QCString trPageIndex()
     {
       return "Indeks Halaman";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.1.0
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.0
+//////////////////////////////////////////////////////////////////////////
 
     virtual QCString trNote()
     {
@@ -970,9 +939,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Atribut Privat Statis";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.1.3
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.3
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as a marker that is put before a \\todo item */
     virtual QCString trTodo()
@@ -985,9 +954,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Daftar Tugas";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.1.4
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.4
+//////////////////////////////////////////////////////////////////////////
 
     virtual QCString trReferencedBy()
     {
@@ -1003,21 +972,23 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     }
     virtual QCString trInclByDepGraph()
     {
-      return "Diagram ini menampilkan file-file yang membutuhkan file ini baik secara langsung maupun tidak langsung:";
+      return "Bagan ini menunjukkan file-file yang memuat"
+	" atau menggunakan file ini baik secara langsung maupun"
+	" tidak langsung:";
     }
     virtual QCString trSince()
     {
       return "Sejak";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.1.5
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.5
+//////////////////////////////////////////////////////////////////////////
 
     /*! title of the graph legend page */
     virtual QCString trLegendTitle()
     {
-      return "Legenda Diagram";
+      return "Keterangan Bagan";
     }
     /*! page explaining how the dot graph's should be interpreted 
      *  The %A in the text below are to prevent link to classes called "A".
@@ -1025,7 +996,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trLegendDocs()
     {
       return 
-        "Halaman ini berisi keterangan cara membaca diagram yang dihasilkan "
+        "Halaman ini berisi keterangan cara membaca bagan yang dibangkitkan "
         "oleh doxygen.<p>\n"
         "Contoh:\n"
         "\\code\n"
@@ -1057,16 +1028,16 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
         "};\n"
         "\\endcode\n"
         "Apabila tag \\c MAX_DOT_GRAPH_HEIGHT di file konfigurasi "
-        "diset ke 240 kode di atas akan menghasilkan diagram berikut:"
+        "diset ke 240 kode di atas akan menghasilkan bagan berikut:"
         "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
         "<p>\n"
-        "Kotak-kotak pada diagram di atas mempunyai arti sebagai berikut:\n"
+        "Kotak-kotak pada bagan di atas mempunyai arti sebagai berikut:\n"
         "<ul>\n"
-        "<li>%Kotak hitam merupakan struktur atau kelas yang bersangkutan.\n"
-        "<li>%Kotak berbingkai hitam adalah struktur atau kelas yang mempunyai dokumentasi.\n"
-        "<li>%Kotak dengan bingkai abu-abu adalah struktur atau kelas tanpa dokumentasi.\n"
-        "<li>%Kotak dengan bingkai merah merupakan struktur atau kelas yang didokumentasikan tetapi"
-        "tidak semua relasinya ditampilkan. %Sebuah diagram "
+        "<li>%Kotak hitam merupakan struct atau kelas yang bersangkutan.\n"
+        "<li>%Kotak berbingkai hitam adalah struct atau kelas yang mempunyai dokumentasi.\n"
+        "<li>%Kotak dengan bingkai abu-abu adalah struct atau kelas tanpa dokumentasi.\n"
+        "<li>%Kotak dengan bingkai merah merupakan struct atau kelas yang didokumentasikan tetapi"
+        "tidak semua relasinya ditampilkan. %Sebuah bagan "
         "akan terpotong apabila lebih besar daripada ukuran yang ditentukan.\n"
         "</ul>\n"
         "Arti dari tanda-tanda panah adalah sebagai berikut:\n"
@@ -1075,7 +1046,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
         "<li>%Panah hijau tua untuk pewarisan diproteksi.\n"
         "<li>%Panah merah tua untuk pewarisan privat.\n"
         "<li>%Panah ungu putus-putus menandakan kelas tersebut berhubungan dengan kelas lain. "
-        "Panah tersebut diberi judul sesuai dengan kelas atau struktur tujuan.\n"
+        "Panah tersebut diberi judul sesuai dengan kelas atau struct tujuan.\n"
         "<li>%Panah kuning putus-putus menandakan hubungan antara sebuah template kelas dan "
         "instance dari template tersebut. Panah tersebut diberi judul sesuai dengan "
         "parameter template yang digunakan.\n"
@@ -1084,12 +1055,12 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! text for the link to the legend page */
     virtual QCString trLegend()
     {
-      return "legenda";
+      return "keterangan";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.0
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.0
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as a marker that is put before a test item */
     virtual QCString trTest()
@@ -1102,9 +1073,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Daftar Tes";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.1
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.1
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as a section header for KDE-2 IDL methods */
     virtual QCString trDCOPMethods()
@@ -1112,9 +1083,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Fungsi Anggota: DCOP";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.2
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.2
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as a section header for IDL properties */
     virtual QCString trProperties()
@@ -1127,15 +1098,10 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Dokumentasi Property";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.4
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.4
+//////////////////////////////////////////////////////////////////////////
 
-    /*! Used for Java interfaces in the summary section of Java packages */
-    virtual QCString trInterfaces()
-    {
-      return "Daftar Interface";
-    }
     /*! Used for Java classes in the summary section of Java packages */
     virtual QCString trClasses()
     {
@@ -1161,27 +1127,22 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! The description of the package index page */
     virtual QCString trPackageListDescription()
     {
-      return "Berikut ini daftar paket beserta keterangan singkat (apabila tersedia):";
+      return "Berikut ini daftar paket, dengan keterangan singkat (apabila tersedia):";
     }
     /*! The link name in the Quick links header for each page */
     virtual QCString trPackages()
     {
       return "Daftar Paket";
     }
-    /*! Used as a chapter title for Latex & RTF output */
-    virtual QCString trPackageDocumentation()
-    {
-      return "Dokumentasi Paket";
-    }
     /*! Text shown before a multi-line define */
     virtual QCString trDefineValue()
     {
       return "Nilai:";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.5
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.5
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as a marker that is put before a \\bug item */
     virtual QCString trBug()
@@ -1194,9 +1155,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Daftar Bug";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.6
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.6
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as ansicpg for RTF file 
      * 
@@ -1250,7 +1211,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trClass(bool first_capital, bool singular)
     { 
       QCString result((first_capital ? "Kelas" : "kelas"));
-      if (!singular)  result+="-kelas";
+      if (!singular) result+="-kelas";
       return result; 
     }
 
@@ -1261,7 +1222,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trFile(bool first_capital, bool singular)
     { 
       QCString result((first_capital ? "File" : "file"));
-      if (!singular)  result+="-file";
+      if (!singular) result+="-file";
       return result; 
     }
 
@@ -1272,7 +1233,6 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trNamespace(bool first_capital, bool)
     { 
       QCString result((first_capital ? "Namespace" : "namespace"));
-      //if (!singular)  result+="s";
       return result; 
     }
 
@@ -1283,7 +1243,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     virtual QCString trGroup(bool first_capital, bool singular)
     { 
       QCString result((first_capital ? "Kelompok" : "kelompok"));
-      if (!singular)  result+="-kelompok";
+      if (!singular) result+="-kelompok";
       return result; 
     }
 
@@ -1291,10 +1251,10 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      *  be followed by a single name or by a list of names 
      *  of the category.
      */
-    virtual QCString trPage(bool first_capital, bool )
+    virtual QCString trPage(bool first_capital, bool singular)
     { 
       QCString result((first_capital ? "Halaman" : "halaman"));
-      //if (!singular)  result+="s";
+      if (!singular) result+="-halaman";
       return result; 
     }
 
@@ -1302,21 +1262,10 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      *  be followed by a single name or by a list of names 
      *  of the category.
      */
-    virtual QCString trMember(bool first_capital, bool )
+    virtual QCString trMember(bool first_capital, bool singular)
     { 
       QCString result((first_capital ? "Anggota" : "anggota"));
-      //if (!singular)  result+="s";
-      return result; 
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trField(bool first_capital, bool)
-    { 
-      QCString result((first_capital ? "Variabel" : "variabel"));
-      //if (!singular)  result+="s";
+      if (!singular) result+="-anggota";
       return result; 
     }
 
@@ -1324,16 +1273,17 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
      *  be followed by a single name or by a list of names 
      *  of the category.
      */
-    virtual QCString trGlobal(bool first_capital, bool)
+    virtual QCString trGlobal(bool first_capital, bool singular)
     { 
-      QCString result((first_capital ? "Global" : "global"));
-      //if (!singular)  result+="s";
+      QCString result((first_capital ? "Definisi" : "definisi"));
+      if (!singular)  result+="-definisi";
+      result += " global";
       return result; 
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.7
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.7
+//////////////////////////////////////////////////////////////////////////
 
     /*! This text is generated when the \\author command is used and
      *  for the author section in man pages. */
@@ -1344,9 +1294,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return result; 
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.11
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.11
+//////////////////////////////////////////////////////////////////////////
 
     /*! This text is put before the list of members referenced by a member
      */
@@ -1355,9 +1305,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Referensi";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.13
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.13
+//////////////////////////////////////////////////////////////////////////
 
     /*! used in member documentation blocks to produce a list of 
      *  members that are implemented by this one.
@@ -1375,9 +1325,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Diimplementasikan di "+trWriteList(numEntries)+".";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.16
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.16
+//////////////////////////////////////////////////////////////////////////
 
     /*! used in RTF documentation as a heading for the Table
      *  of Contents.
@@ -1387,9 +1337,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Daftar Isi";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.17
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.17
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as the header of the list of item that have been 
      *  flagged deprecated 
@@ -1399,9 +1349,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Daftar Kadaluarsa";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.2.18
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.18
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as a header for declaration section of the events found in 
      * a C# program
@@ -1416,9 +1366,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Dokumentasi Event";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.3
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used as a heading for a list of Java class types with package scope.
      */
@@ -1455,9 +1405,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Daftar Atribut Statis Paket";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.3.1
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.1
+//////////////////////////////////////////////////////////////////////////
 
     /*! Used in the quick index of a class/file/namespace member list page 
      *  to link to the unfiltered list of all members.
@@ -1469,12 +1419,12 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
     /*! Put in front of the call graph for a function. */
     virtual QCString trCallGraph()
     {
-      return "Berikut ini diagram pemanggilan untuk fungsi ini:";
+      return "Berikut ini bagan fungsi-terpanggil untuk fungsi ini:";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.3.3
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.3
+//////////////////////////////////////////////////////////////////////////
 
     /*! When the search engine is enabled this text is put in the header 
      *  of each page before the field where one can enter the text to search 
@@ -1523,9 +1473,9 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Kecocokan:";
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.3.8
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.8
+//////////////////////////////////////////////////////////////////////////
 
     /*! This is used in HTML as the title of page with source code for file filename
      */
@@ -1534,15 +1484,15 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return "Kode Sumber:" + filename;
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.3.9
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.9
+//////////////////////////////////////////////////////////////////////////
 
     /*! This is used as the name of the chapter containing the directory
      *  hierarchy.
      */
     virtual QCString trDirIndex()
-    { return "Struktur Direktori"; }
+    { return "Hierarki Direktori"; }
 
     /*! This is used as the name of the chapter containing the documentation
      *  of the directories.
@@ -1579,18 +1529,339 @@ class TranslatorIndonesian : public TranslatorAdapter_1_4_6
       return result; 
     }
 
-    //////////////////////////////////////////////////////////////////////////
-    // new since 1.4.1
-    //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.1
+//////////////////////////////////////////////////////////////////////////
 
     /*! This text is added to the documentation when the \\overload command
      *  is used for a overloaded function.
      */
     virtual QCString trOverloadText()
     {
-      return "Ini adalah fungsi yang di-overload. Perbedaannya dengan fungsi di atas hanya pada "
-             "parameter-parameter yang diterima.";
+      return "Ini adalah fungsi anggota yang di-overload"
+	" untuk kemudahan. Perbedaannya dengan fungsi di atas"
+	" hanya pada parameter-parameter yang diterima.";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used to introduce a caller (or called-by) graph */
+    virtual QCString trCallerGraph()
+    {
+      return "Berikut ini bagan fungsi-pemanggil untuk fungsi ini:";
+    }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for enumeration values
+     */
+    virtual QCString trEnumerationValueDocumentation()
+    { return "Dokumentasi Nilai Enumerasi"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.5.4 (mainly for Fortran)
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! header that is put before the list of member subprograms (Fortran). */
+    virtual QCString trMemberFunctionDocumentationFortran()
+    { return "Dokumentasi Fungsi/Subrutin Anggota"; }
+
+    /*! This is put above each page as a link to the list of annotated data types (Fortran). */    
+    virtual QCString trCompoundListFortran()
+    { return "Daftar Tipe Data"; }
+
+    /*! This is put above each page as a link to all members of compounds (Fortran). */
+    virtual QCString trCompoundMembersFortran()
+    { return "Variabel Data"; }
+
+    /*! This is an introduction to the annotated compound list (Fortran). */
+    virtual QCString trCompoundListDescriptionFortran()
+    { return "Berikut daftar tipe data, dengan penjelasan singkat:"; }
+
+    /*! This is an introduction to the page with all data types (Fortran). */
+    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
+    {
+      QCString result="Berikut daftar semua anggota tipe data ";
+      if (!extractAll)
+      {
+        result+="terdokumentasi ";
+      }
+      result+=" dengan tautan ke ";
+      if (!extractAll) 
+      {
+         result+="dokumentasi struktur data untuk setiap anggota:";
+      }
+      else 
+      {
+         result+="tipe data yang memuatnya:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     * annotated compound index (Fortran).
+     */
+    virtual QCString trCompoundIndexFortran()
+    { return "Indeks Tipe Data"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all data types (Fortran).
+     */
+    virtual QCString trTypeDocumentation()
+    { return "Dokumentasi Tipe Data"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of (global) subprograms (Fortran).
+     */
+    virtual QCString trSubprograms()
+    { return "Fungsi/Subrutin"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for subprograms (Fortran)
+     */
+    virtual QCString trSubprogramDocumentation()
+    { return "Dokumentasi Fungsi/Subrutin"; }
+
+    /*! This is used in the documentation of a file/namespace/group before 
+     *  the list of links to documented compounds (Fortran)
+     */
+     virtual QCString trDataTypes()
+    { return "Tipe Data"; }
+    
+    /*! used as the title of page containing all the index of all modules (Fortran). */
+    virtual QCString trModulesList()
+    { return "Modules List"; }
+
+    /*! used as an introduction to the modules list (Fortran) */
+    virtual QCString trModulesListDescription(bool extractAll)
+    {
+      QCString result="Berikut daftar semua modul";
+      if (!extractAll) result+=" terdokumentasi";
+      result+=", dengan penjelasan singkat:";
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a module/type (Fortran) */
+    virtual QCString trCompoundReferenceFortran(const char *clName,
+                                    ClassDef::CompoundType compType,
+                                    bool isTemplate)
+    {
+      QCString result="Referensi ";
+      if (isTemplate) result+="Template ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="Modul "; break;
+        case ClassDef::Struct:     result+="Tipe "; break;
+        case ClassDef::Union:      result+="Union "; break;
+        case ClassDef::Interface:  result+="Antarmuka "; break;
+        case ClassDef::Protocol:   result+="Protokol "; break;
+        case ClassDef::Category:   result+="Kategori "; break;
+        case ClassDef::Exception:  result+="Eksepsi "; break;
+      }
+      result+=(QCString)clName;
+      return result;
+    }
+    /*! used as the title of the HTML page of a module (Fortran) */
+    virtual QCString trModuleReference(const char *namespaceName)
+    {
+      QCString result="Referensi Modul ";
+      result+=namespaceName;
+      return result;
+    }
+    
+    /*! This is put above each page as a link to all members of modules. (Fortran) */
+    virtual QCString trModulesMembers()
+    { return "Anggota Modul"; }
+
+    /*! This is an introduction to the page with all modules members (Fortran) */
+    virtual QCString trModulesMemberDescription(bool extractAll)
+    { 
+      QCString result="Berikut daftar semua anggota modul ";
+      if (!extractAll) result+="terdokumentasi ";
+      result+="dengan tautan ke ";
+      if (extractAll) 
+      {
+        result+="dokumentasi modul untuk setiap anggota:";
+      }
+      else 
+      {
+        result+="modul yang memuatnya:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     *  index of all modules (Fortran).
+     */
+    virtual QCString trModulesIndex()
+    { return "Indeks Modul"; }
+    
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trModule(bool first_capital, bool singular)
+    {       
+      QCString result((first_capital ? "Modul" : "modul"));
+      if (!singular)  result+="-modul";
+      return result; 
+    }
+    /*! This is put at the bottom of a module documentation page and is
+     *  followed by a list of files that were used to generate the page.
+     */
+    virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
+        bool single)
+    { // here s is one of " Module", " Struct" or " Union"
+      // single is true implies a single file
+      QCString result=(QCString)"Dokumentasi untuk ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="module"; break;
+        case ClassDef::Struct:     result+="type"; break;
+        case ClassDef::Union:      result+="union"; break;
+        case ClassDef::Interface:  result+="interface"; break;
+        case ClassDef::Protocol:   result+="protocol"; break;
+        case ClassDef::Category:   result+="category"; break;
+        case ClassDef::Exception:  result+="exception"; break;
+      }
+      result+=" ini dibangkitkan dari file";
+      if (!single) result+="-file ";
+	  result+="berikut:";
+      return result;
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trType(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Tipe" : "tipe"));
+      if (!singular)  result+="-tipe";
+      return result; 
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trSubprogram(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Subprogram" : "subprogram"));
+      if (!singular)  result+="-subprogram";
+      return result; 
+    }
+
+    /*! C# Type Constraint list */
+    virtual QCString trTypeConstraints()
+    {
+      return "Batasan Tipe";
     }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0 (mainly for the new search engine)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! directory relation for \a name */
+    virtual QCString trDirRelation(const char *name)
+    {
+      return "Relasi "+QCString(name);
+    }
+
+    /*! Loading message shown when loading search results */
+    virtual QCString trLoading()
+    {
+      return "Memuat...";
+    }
+
+    /*! Label used for search results in the global namespace */
+    virtual QCString trGlobalNamespace()
+    {
+      return "Namespace Global";
+    }
+
+    /*! Message shown while searching */
+    virtual QCString trSearching()
+    {
+      return "Mencari...";
+    }
+
+    /*! Text shown when no search results are found */
+    virtual QCString trNoMatches()
+    {
+      return "Tidak Ditemukan";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3 (missing items for the directory pages)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! introduction text for the directory dependency graph */
+    virtual QCString trDirDependency(const char *name)
+    {
+      return (QCString)"Bagan dependensi direktori untuk "+name;
+    }
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the first column mentions the
+     *  source file that has a relation to another file.
+     */
+    virtual QCString trFileIn(const char *name)
+    {
+      return (QCString)"File dimuat dalam "+name;
+    }
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the second column mentions the
+     *  destination file that is included.
+     */
+    virtual QCString trIncludesFileIn(const char *name)
+    {
+      return (QCString)"Memuat file dalam "+name;
+    }
+
+    /** Compiles a date string. 
+     *  @param year Year in 4 digits
+     *  @param month Month of the year: 1=January
+     *  @param day Day of the Month: 1..31
+     *  @param dayOfWeek Day of the week: 1=Monday..7=Sunday
+     *  @param hour Hour of the day: 0..23
+     *  @param minutes Minutes in the hour: 0..59
+     *  @param seconds Seconds within the minute: 0..59
+     *  @param includeTime Include time in the result string?
+     */
+    virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+                                int hour,int minutes,int seconds,
+                                bool includeTime)
+    {
+      static const char *days[]   = { "Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu" };
+      static const char *months[] = { "Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember" };
+      QCString sdate;
+      sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
+      if (includeTime)
+      {
+        QCString stime;
+        stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
+        sdate+=stime;
+      }
+      return sdate;
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.7.5
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Header for the page with bibliographic citations */
+    virtual QCString trCiteReferences()
+    { return "Daftar Pustaka"; }
+
+    /*! Text for copyright paragraph */
+    virtual QCString trCopyright()
+    { return "Hak Cipta"; }
+
+    /*! Header for the graph showing the directory dependencies */
+    virtual QCString trDirDepGraph(const char *name)
+    { return QCString("Bagan dependensi directori untuk ")+name+":"; }
+
 };
 
 #endif
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index d4e8fef..764ab71 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -1092,7 +1092,7 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
     {
       if (!cd->isHidden() && cd->name().find('@')==-1) // skip anonymous scopes
       {
-        t << "    <innerclass refid=\"" << cd->getOutputFileBase()
+        t << "    <innerclass refid=\"" << classOutputFileBase(cd)
           << "\" prot=\"";
         switch(cd->protection())
         {
@@ -1327,7 +1327,7 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
     }
   }
 
-  writeInnerClasses(cd->getInnerClasses(),t);
+  writeInnerClasses(cd->getClassSDict(),t);
 
   writeTemplateList(cd,t);
   if (cd->getMemberGroupSDict())
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index d4cce0b..af28421 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -1847,7 +1847,7 @@
 					>
 					<Tool
 						Name="Lex"
-						CommandLine="flex -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
+						CommandLine="flex -PtclScanYY [AllOptions] [AdditionalOptions] [inputs]"
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-- 
cgit v0.12

