Index: gtags
===================================================================
--- .hgtags	(revision 1321)
+++ 	(revision )
@@ -1,2 +1,0 @@
-57ab090b6109902536ee34b1e8d4d123474311e3 r1.3
-bdabbf66b2ad131199059736178664f44c69adaf r1.3.1
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(revision 1327)
+++ CMakeLists.txt	(revision 1322)
@@ -151,11 +151,8 @@
   ELSEIF(MSVC)
     # This part is unnecessary 'casue the same is set by the lemon/core.h.
-    # Still kept as an example.
-
-    # SET(CXX_WARNING "/wd4250 /wd4267 /wd4355 /wd4503 /wd4800 /wd4996")
-
+    # Still keep it as an example.
+    SET(CXX_WARNING "/wd4250 /wd4355 /wd4503 /wd4800 /wd4996")
     # Suppressed warnings:
     # C4250: 'class1' : inherits 'class2::member' via dominance
-    # C4267: conversion from 'size_t' to 'type', possible loss of data
     # C4355: 'this' : used in base member initializer list
     # C4503: 'function' : decorated name length exceeded, name was truncated
@@ -172,5 +169,4 @@
 
 IF(MSVC)
-  SET(CMAKE_CXX_FLAGS "/bigobj ${CMAKE_CXX_FLAGS}")
   SET( CMAKE_CXX_FLAGS_MAINTAINER "/WX ${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING
     "Flags used by the C++ compiler during maintainer builds."
Index: NEWS
===================================================================
--- NEWS	(revision 1320)
+++ NEWS	(revision 1281)
@@ -1,17 +1,2 @@
-2014-07-07 Version 1.3.1 released
-
-        Bugfix release.
-
-        #484: Require CMAKE 2.8
-        #471, #472, #480: Various clang compatibility fixes
-        #481, #482: Fix shared lib build and versioning
-        #476: Fix invalid map query in NearestNeighborTsp
-        #478: Bugfix in debug checking and lower bound handling
-              in min cost flow algorithms
-        #479, #465: Bugfix in default LP/MIP backend settings
-        #476: Bugfix in tsp_test
-        #487: Add missing include header and std:: namespace spec.
-        #474: Fix division by zero error in NetworkSimplex
-
 2013-08-10 Version 1.3 released
 
Index: doc/groups.dox
===================================================================
--- doc/groups.dox	(revision 1280)
+++ doc/groups.dox	(revision 1271)
@@ -295,4 +295,12 @@
 
 /**
+@defgroup matrices Matrices
+@ingroup auxdat
+\brief Two dimensional data storages implemented in LEMON.
+
+This group contains two dimensional data storages implemented in LEMON.
+*/
+
+/**
 @defgroup algs Algorithms
 \brief This group contains the several algorithms
@@ -327,4 +335,8 @@
    but the digraph should not contain directed cycles with negative total
    length.
+ - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms
+   for solving the \e all-pairs \e shortest \e paths \e problem when arc
+   lenghts can be either positive or negative, but the digraph should
+   not contain directed cycles with negative total length.
  - \ref Suurballe A successive shortest path algorithm for finding
    arc-disjoint paths between two nodes having minimum total length.
@@ -360,8 +372,18 @@
 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f]
 
-\ref Preflow is an efficient implementation of Goldberg-Tarjan's
-preflow push-relabel algorithm \cite goldberg88newapproach for finding
-maximum flows. It also provides functions to query the minimum cut,
-which is the dual problem of maximum flow.
+LEMON contains several algorithms for solving maximum flow problems:
+- \ref EdmondsKarp Edmonds-Karp algorithm
+  \cite edmondskarp72theoretical.
+- \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm
+  \cite goldberg88newapproach.
+- \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees
+  \cite dinic70algorithm, \cite sleator83dynamic.
+- \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees
+  \cite goldberg88newapproach, \cite sleator83dynamic.
+
+In most cases the \ref Preflow algorithm provides the
+fastest method for computing a maximum flow. All implementations
+also provide functions to query the minimum cut, which is the dual
+problem of maximum flow.
 
 \ref Circulation is a preflow push-relabel algorithm implemented directly
@@ -498,4 +520,14 @@
 
 The matching algorithms implemented in LEMON:
+- \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm
+  for calculating maximum cardinality matching in bipartite graphs.
+- \ref PrBipartiteMatching Push-relabel algorithm
+  for calculating maximum cardinality matching in bipartite graphs.
+- \ref MaxWeightedBipartiteMatching
+  Successive shortest path algorithm for calculating maximum weighted
+  matching and maximum weighted bipartite matching in bipartite graphs.
+- \ref MinCostMaxBipartiteMatching
+  Successive shortest path algorithm for calculating minimum cost maximum
+  matching in bipartite graphs.
 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating
   maximum cardinality matching in general graphs.
@@ -622,4 +654,21 @@
 
 /**
+@defgroup lp_utils Tools for Lp and Mip Solvers
+@ingroup lp_group
+\brief Helper tools to the Lp and Mip solvers.
+
+This group adds some helper tools to general optimization framework
+implemented in LEMON.
+*/
+
+/**
+@defgroup metah Metaheuristics
+@ingroup gen_opt_group
+\brief Metaheuristics for LEMON library.
+
+This group contains some metaheuristic optimization tools.
+*/
+
+/**
 @defgroup utils Tools and Utilities
 \brief Tools and utilities for programming in LEMON
Index: lemon/arg_parser.h
===================================================================
--- lemon/arg_parser.h	(revision 1327)
+++ lemon/arg_parser.h	(revision 959)
@@ -27,5 +27,4 @@
 #include <sstream>
 #include <algorithm>
-#include <lemon/core.h>
 #include <lemon/assert.h>
 
Index: lemon/core.h
===================================================================
--- lemon/core.h	(revision 1327)
+++ lemon/core.h	(revision 1270)
@@ -30,5 +30,4 @@
 // Disable the following warnings when compiling with MSVC:
 // C4250: 'class1' : inherits 'class2::member' via dominance
-// C4267: conversion from 'size_t' to 'type', possible loss of data
 // C4355: 'this' : used in base member initializer list
 // C4503: 'function' : decorated name length exceeded, name was truncated
@@ -36,8 +35,14 @@
 // C4996: 'function': was declared deprecated
 #ifdef _MSC_VER
-#pragma warning( disable : 4250 4267 4355 4503 4800 4996 )
+#pragma warning( disable : 4250 4355 4503 4800 4996 )
 #endif
 
-#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
+#ifdef __GNUC__
+#define GCC_VERSION (__GNUC__ * 10000                   \
+                     + __GNUC_MINOR__ * 100             \
+                     + __GNUC_PATCHLEVEL__)
+#endif
+
+#if GCC_VERSION >= 40800
 // Needed by the [DI]GRAPH_TYPEDEFS marcos for gcc 4.8
 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
Index: lemon/counter.h
===================================================================
--- lemon/counter.h	(revision 1327)
+++ lemon/counter.h	(revision 833)
@@ -22,6 +22,4 @@
 #include <string>
 #include <iostream>
-
-#include <lemon/core.h>
 
 ///\ingroup timecount
Index: lemon/cplex.cc
===================================================================
--- lemon/cplex.cc	(revision 1270)
+++ lemon/cplex.cc	(revision 1330)
@@ -116,32 +116,35 @@
                          ExprIterator e, Value ub) {
     int i = CPXgetnumrows(cplexEnv(), _prob);
+
+    int rmatbeg = 0;
+    
+    std::vector<int> indices;
+    std::vector<Value> values;
+
+    for(ExprIterator it=b; it!=e; ++it) {
+      indices.push_back(it->first);
+      values.push_back(it->second);
+    }
+
     if (lb == -INF) {
       const char s = 'L';
-      CPXnewrows(cplexEnv(), _prob, 1, &ub, &s, 0, 0);
+      CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &ub, &s,
+                 &rmatbeg, &indices.front(), &values.front(), 0, 0);
     } else if (ub == INF) {
       const char s = 'G';
-      CPXnewrows(cplexEnv(), _prob, 1, &lb, &s, 0, 0);
+      CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &lb, &s,
+                 &rmatbeg, &indices.front(), &values.front(), 0, 0);
     } else if (lb == ub){
       const char s = 'E';
-      CPXnewrows(cplexEnv(), _prob, 1, &lb, &s, 0, 0);
+      CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &lb, &s,
+                 &rmatbeg, &indices.front(), &values.front(), 0, 0);
     } else {
       const char s = 'R';
       double len = ub - lb;
-      CPXnewrows(cplexEnv(), _prob, 1, &lb, &s, &len, 0);
-    }
-
-    std::vector<int> indices;
-    std::vector<int> rowlist;
-    std::vector<Value> values;
-
-    for(ExprIterator it=b; it!=e; ++it) {
-      indices.push_back(it->first);
-      values.push_back(it->second);
-      rowlist.push_back(i);
-    }
-
-    CPXchgcoeflist(cplexEnv(), _prob, values.size(),
-                   &rowlist.front(), &indices.front(), &values.front());
-
+      CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &ub, &s,
+                 &rmatbeg, &indices.front(), &values.front(), 0, 0);
+      CPXchgrngval(cplexEnv(), _prob, 1, &i, &len);
+    }
+    
     return i;
   }
Index: lemon/elevator.h
===================================================================
--- lemon/elevator.h	(revision 1328)
+++ lemon/elevator.h	(revision 628)
@@ -168,5 +168,5 @@
     int onLevel(int l) const
     {
-      return static_cast<int>(_first[l+1]-_first[l]);
+      return _first[l+1]-_first[l];
     }
     ///Return true if level \c l is empty.
@@ -178,10 +178,10 @@
     int aboveLevel(int l) const
     {
-      return static_cast<int>(_first[_max_level+1]-_first[l+1]);
+      return _first[_max_level+1]-_first[l+1];
     }
     ///Return the number of active items on level \c l.
     int activesOnLevel(int l) const
     {
-      return static_cast<int>(_last_active[l]-_first[l]+1);
+      return _last_active[l]-_first[l]+1;
     }
     ///Return true if there is no active item on level \c l.
Index: lemon/radix_sort.h
===================================================================
--- lemon/radix_sort.h	(revision 1328)
+++ lemon/radix_sort.h	(revision 1270)
@@ -329,5 +329,5 @@
       Allocator allocator;
 
-      int length = static_cast<int>(std::distance(first, last));
+      int length = std::distance(first, last);
       Key* buffer = allocator.allocate(2 * length);
       try {
Index: lemon/random.h
===================================================================
--- lemon/random.h	(revision 1328)
+++ lemon/random.h	(revision 631)
@@ -200,5 +200,5 @@
         initState(init);
 
-        num = static_cast<int>(length > end - begin ? length : end - begin);
+        num = length > end - begin ? length : end - begin;
         while (num--) {
           curr[0] = (curr[0] ^ ((curr[1] ^ (curr[1] >> (bits - 2))) * mul1))
@@ -214,5 +214,5 @@
         }
 
-        num = length - 1; cnt = static_cast<int>(length - (curr - state) - 1);
+        num = length - 1; cnt = length - (curr - state) - 1;
         while (num--) {
           curr[0] = (curr[0] ^ ((curr[1] ^ (curr[1] >> (bits - 2))) * mul2))
Index: lemon/static_graph.h
===================================================================
--- lemon/static_graph.h	(revision 1328)
+++ lemon/static_graph.h	(revision 956)
@@ -204,5 +204,5 @@
 
       node_num = n;
-      arc_num = static_cast<int>(std::distance(first, last));
+      arc_num = std::distance(first, last);
 
       node_first_out = new int[node_num + 1];
