Index: lemon/bits/alteration_notifier.h
===================================================================
--- lemon/bits/alteration_notifier.h	(revision 1435)
+++ lemon/bits/alteration_notifier.h	(revision 1587)
@@ -21,5 +21,5 @@
 #include <algorithm>
 
-///\ingroup graphmaps
+///\ingroup graphmapfactory
 ///\file
 ///\brief Observer registry for graph alteration observers.
@@ -27,5 +27,5 @@
 namespace lemon {
 
-  /// \addtogroup graphmaps
+  /// \addtogroup graphmapfactory
   /// @{
 
Index: lemon/bits/array_map.h
===================================================================
--- lemon/bits/array_map.h	(revision 1435)
+++ lemon/bits/array_map.h	(revision 1587)
@@ -21,5 +21,5 @@
 #include <lemon/bits/map_iterator.h>
 
-///\ingroup graphmaps
+///\ingroup graphmapfactory
 ///\file
 ///\brief Graph maps that construates and destruates
@@ -29,5 +29,5 @@
 
 
-  /// \addtogroup graphmaps
+  /// \addtogroup graphmapfactory
   /// @{
 	
Index: lemon/bits/default_map.h
===================================================================
--- lemon/bits/default_map.h	(revision 1435)
+++ lemon/bits/default_map.h	(revision 1587)
@@ -22,5 +22,5 @@
 #include <lemon/bits/vector_map.h>
 
-///\ingroup graphmaps
+///\ingroup graphmapfactory
 ///\file
 ///\brief Graph maps that construct and destruct
@@ -29,5 +29,5 @@
 namespace lemon {
 
-/// \addtogroup graphmaps
+/// \addtogroup graphmapfactory
 /// @{
 
Index: lemon/bits/map_iterator.h
===================================================================
--- lemon/bits/map_iterator.h	(revision 1435)
+++ lemon/bits/map_iterator.h	(revision 1587)
@@ -23,5 +23,5 @@
 #include <lemon/graph_utils.h>
 
-///\ingroup graphmaps
+///\ingroup graphmapfactory
 ///\file
 ///\brief Iterators on the maps.
@@ -29,5 +29,5 @@
 namespace lemon {
 
-  /// \addtogroup graphmaps
+  /// \addtogroup graphmapfactory
   /// @{
 
Index: lemon/bits/vector_map.h
===================================================================
--- lemon/bits/vector_map.h	(revision 1435)
+++ lemon/bits/vector_map.h	(revision 1587)
@@ -25,5 +25,5 @@
 #include <lemon/bits/alteration_notifier.h>
 
-///\ingroup graphmaps
+///\ingroup graphmapfactory
 ///\file
 ///\brief Vector based graph maps.
@@ -31,5 +31,5 @@
 namespace lemon {
   
-  /// \addtogroup graphmaps
+  /// \addtogroup graphmapfactory
   /// @{
   
Index: lemon/max_matching.h
===================================================================
--- lemon/max_matching.h	(revision 1435)
+++ lemon/max_matching.h	(revision 1587)
@@ -98,5 +98,11 @@
     ///2*number of nodes), and a heuristical Edmonds' algorithm with a
     ///heuristic of postponing shrinks for dense graphs. 
-    inline void run();
+    void run() {
+      if ( countUndirEdges(g) < HEUR_density*countNodes(g) ) {
+	greedyMatching();
+	runEdmonds(0);
+      } else runEdmonds(1);
+    }
+
 
     ///Runs Edmonds' algorithm.
@@ -105,5 +111,31 @@
     ///Edmonds' algorithm with a heuristic of postponing shrinks,
     ///giving a faster algorithm for dense graphs.  
-    void runEdmonds( int heur );
+    void runEdmonds( int heur = 1 ) {
+      
+      for(NodeIt v(g); v!=INVALID; ++v)
+	position.set(v,C);      
+      
+      typename Graph::template NodeMap<Node> ear(g,INVALID); 
+      //undefined for the base nodes of the blossoms (i.e. for the
+      //representative elements of UFE blossom) and for the nodes in C 
+      
+      typename UFE::MapType blossom_base(g);
+      UFE blossom(blossom_base);
+      typename UFE::MapType tree_base(g);
+      UFE tree(tree_base);
+      //If these UFE's would be members of the class then also
+      //blossom_base and tree_base should be a member.
+      
+      for(NodeIt v(g); v!=INVALID; ++v) {
+	if ( position[v]==C && _mate[v]==INVALID ) {
+	  blossom.insert(v);
+	  tree.insert(v); 
+	  position.set(v,D);
+	  if ( heur == 1 ) lateShrink( v, ear, blossom, tree );
+	  else normShrink( v, ear, blossom, tree );
+	}
+      }
+    }
+
 
     ///Finds a greedy matching starting from the actual matching.
@@ -111,5 +143,17 @@
     ///Starting form the actual matching stored, it finds a maximal
     ///greedy matching.
-    void greedyMatching();
+    void greedyMatching() {
+      for(NodeIt v(g); v!=INVALID; ++v)
+	if ( _mate[v]==INVALID ) {
+	  for( IncEdgeIt e(g,v); e!=INVALID ; ++e ) {
+	    Node y=g.runningNode(e);
+	    if ( _mate[y]==INVALID && y!=v ) {
+	      _mate.set(v,y);
+	      _mate.set(y,v);
+	      break;
+	    }
+	  }
+	} 
+    }
 
     ///Returns the size of the actual matching stored.
@@ -117,5 +161,14 @@
     ///Returns the size of the actual matching stored. After \ref
     ///run() it returns the size of a maximum matching in the graph.
-    int size() const;
+    int size() const {
+      int s=0;
+      for(NodeIt v(g); v!=INVALID; ++v) {
+	if ( _mate[v]!=INVALID ) {
+	  ++s;
+	}
+      }
+      return s/2;
+    }
+
 
     ///Resets the actual matching to the empty matching.
@@ -123,5 +176,8 @@
     ///Resets the actual matching to the empty matching.  
     ///
-    void resetMatching();
+    void resetMatching() {
+      for(NodeIt v(g); v!=INVALID; ++v)
+	_mate.set(v,INVALID);      
+    }
 
     ///Returns the mate of a node in the actual matching.
@@ -285,42 +341,4 @@
 
   template <typename Graph>
-  void MaxMatching<Graph>::run() {
-    if ( countUndirEdges(g) < HEUR_density*countNodes(g) ) {
-      greedyMatching();
-      runEdmonds(0);
-    } else runEdmonds(1);
-  }
-
-
-  template <typename Graph>
-  void MaxMatching<Graph>::runEdmonds( int heur=1 ) {
-
-    for(NodeIt v(g); v!=INVALID; ++v)
-      position.set(v,C);      
-
-    typename Graph::template NodeMap<Node> ear(g,INVALID); 
-    //undefined for the base nodes of the blossoms (i.e. for the
-    //representative elements of UFE blossom) and for the nodes in C 
-
-    typename UFE::MapType blossom_base(g);
-    UFE blossom(blossom_base);
-    typename UFE::MapType tree_base(g);
-    UFE tree(tree_base);
-    //If these UFE's would be members of the class then also
-    //blossom_base and tree_base should be a member.
-
-    for(NodeIt v(g); v!=INVALID; ++v) {
-      if ( position[v]==C && _mate[v]==INVALID ) {
-	blossom.insert(v);
-	tree.insert(v); 
-	position.set(v,D);
-	if ( heur == 1 ) lateShrink( v, ear, blossom, tree );
-	else normShrink( v, ear, blossom, tree );
-      }
-    }
-  }
-
-    
-  template <typename Graph>
   void MaxMatching<Graph>::lateShrink(Node v, typename Graph::template NodeMap<Node>& ear,  
 				      UFE& blossom, UFE& tree) {
@@ -458,36 +476,4 @@
       }
     }
-  }
-
-  template <typename Graph>
-  void MaxMatching<Graph>::greedyMatching() {
-    for(NodeIt v(g); v!=INVALID; ++v)
-      if ( _mate[v]==INVALID ) {
-	for( IncEdgeIt e(g,v); e!=INVALID ; ++e ) {
-	  Node y=g.runningNode(e);
-	  if ( _mate[y]==INVALID && y!=v ) {
-	    _mate.set(v,y);
-	    _mate.set(y,v);
-	    break;
-	  }
-	}
-      } 
-  }
-   
-  template <typename Graph>
-  int MaxMatching<Graph>::size() const {
-    int s=0;
-    for(NodeIt v(g); v!=INVALID; ++v) {
-      if ( _mate[v]!=INVALID ) {
-	++s;
-      }
-    }
-    return s/2;
-  }
-
-  template <typename Graph>
-  void MaxMatching<Graph>::resetMatching() {
-    for(NodeIt v(g); v!=INVALID; ++v)
-      _mate.set(v,INVALID);      
   }
 
