Index: src/util.cpp
===================================================================
--- src/util.cpp	(revision 757)
+++ src/util.cpp	(working copy)
@@ -5117,7 +5117,10 @@
       {
         case ':': 
           //printf("stripScope(%s)=%s\n",name,result.right(l-p-1).data());
-          return result.right(l-p-1);
+          // Only exit in case of ::
+          if (result.at(p-1) == ':') return result.right(l-p-1);
+          p--;
+          break;
         case '>':
           if (skipBracket) // we don't care about brackets
           {
@@ -5468,9 +5471,29 @@
  *  class \a name and a template argument list \a templSpec. If -1 is returned
  *  there are no more matches.
  */
-int extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCString &templSpec)
+int extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCString &templSpec,SrcLangExt lang)
 {
-  static const QRegExp re("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9:\\x80-\\xFF]*");
+  static const QRegExp re_norm("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9:\\x80-\\xFF]*");
+  static const QRegExp re_ftn("[a-z_A-Z\\x80-\\xFF][()=_a-z_A-Z0-9:\\x80-\\xFF]*");
+  QRegExp re;
+
+  if (lang == SrcLangExt_F90)
+  {
+    if (type.mid(pos,1) == ",") return -1;
+    if ((type.mid(0,4) == "type") || (type.mid(0,4) == "TYPE"))
+    {
+      re = re_norm;
+    }
+    else
+    {
+      re = re_ftn;
+    }
+  }
+  else
+  {
+    re = re_norm;
+  }
+
   name.resize(0);
   templSpec.resize(0);
   int i,l;
Index: src/dot.cpp
===================================================================
--- src/dot.cpp	(revision 757)
+++ src/dot.cpp	(working copy)
@@ -1319,15 +1319,18 @@
     writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priMethods),m_classDef);
     writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priStaticMethods),m_classDef);
     writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priSlots),m_classDef);
-    if (m_classDef->getMemberGroupSDict())
+    if (m_classDef->getLanguage() != SrcLangExt_F90) // Fortran has no function pointers / functions in types
     {
-      MemberGroupSDict::Iterator mgdi(*m_classDef->getMemberGroupSDict());
-      MemberGroup *mg;
-      for (mgdi.toFirst();(mg=mgdi.current());++mgdi)
+      if (m_classDef->getMemberGroupSDict())
       {
-        if (mg->members())
+        MemberGroupSDict::Iterator mgdi(*m_classDef->getMemberGroupSDict());
+        MemberGroup *mg;
+        for (mgdi.toFirst();(mg=mgdi.current());++mgdi)
         {
-          writeBoxMemberList(t,'*',mg->members(),m_classDef);
+          if (mg->members())
+          {
+            writeBoxMemberList(t,'*',mg->members(),m_classDef);
+          }
         }
       }
     }
Index: src/classdef.h
===================================================================
--- src/classdef.h	(revision 757)
+++ src/classdef.h	(working copy)
@@ -263,6 +263,8 @@
 
     bool isUsedOnly() const;
 
+    SrcLangExt getLanguage() const;
+
     //-----------------------------------------------------------------------------------
     // --- setters ----
     //-----------------------------------------------------------------------------------
Index: src/doxygen.cpp
===================================================================
--- src/doxygen.cpp	(revision 757)
+++ src/doxygen.cpp	(working copy)
@@ -3720,7 +3720,7 @@
           }
 
           //printf("      template substitution gives=%s\n",type.data());
-          while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec)!=-1)
+          while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec,rootNav->lang())!=-1)
           {
             // find the type (if any) that matches usedClassName
             ClassDef *typeCd = getResolvedClass(masterCd,
Index: src/util.h
===================================================================
--- src/util.h	(revision 757)
+++ src/util.h	(working copy)
@@ -266,7 +266,7 @@
                              /* in */     Definition *context);
 
 int extractClassNameFromType(const QCString &type,int &pos,
-                              QCString &name,QCString &templSpec);
+                              QCString &name,QCString &templSpec,SrcLangExt=SrcLangExt_Unknown);
 
 QCString substituteTemplateArgumentsInString(
        const QCString &name,
Index: src/classdef.cpp
===================================================================
--- src/classdef.cpp	(revision 757)
+++ src/classdef.cpp	(working copy)
@@ -3522,6 +3522,11 @@
   m_impl->usedOnly = b;
 }
 
+SrcLangExt ClassDef::getLanguage() const
+{
+  return m_impl->lang;
+}
+
 bool ClassDef::isUsedOnly() const
 {
   return m_impl->usedOnly;
