diff --git a/Mesh/mwis.hpp b/Mesh/mwis.hpp
index 448e83a39ba418c91c9884d0a80a68e057f73a3c..0f90fa9d2db7224a0a9c830f7c32e108fd33f01c 100644
--- a/Mesh/mwis.hpp
+++ b/Mesh/mwis.hpp
@@ -756,7 +756,7 @@ public:
     visit_state<Graph, WeightMap> visitor;
 
     max_bound<weight> bound;
-    successor<Graph, WeightMap, decltype(bound)>
+    successor<Graph, WeightMap, max_bound<weight> >
       successor(bound, visitor.best_value, cur.solution.size() + _limit);
 
     visitor(cur);
@@ -989,7 +989,7 @@ public:
     for (std::size_t i = 0; i < visitor.best_solution.size(); i++)
       visitor.best_value += get(l_state.weight_map, visitor.best_solution[i]);
 
-    successor<Graph, WeightMap, decltype(bound)> successor(
+    successor<Graph, WeightMap, lagrangian_bound<Graph, WeightMap> > successor(
       bound, visitor.best_value);
 
     search::depth_first_search(search_state, visitor, successor);
@@ -1123,7 +1123,7 @@ void maximum_weight_independent_set(const Graph &graph, WeightMap weight_map,
   bound.check_consistency();
 
   mwis::visit_state<Graph, WeightMap> visitor;
-  mwis::successor<Graph, WeightMap, decltype(bound)> successor(
+  mwis::successor<Graph, WeightMap, mwis::lagrangian_bound<Graph, WeightMap> > successor(
     bound, visitor.best_value);
 
   mwis::state<Graph, WeightMap> state(
@@ -1152,11 +1152,12 @@ void maximum_weight_independent_set(const Graph &graph, WeightMap weight_map,
   search::greedy_search(state, successor, eval);
 
   mwis::lns_state<Graph, WeightMap> l_state(graph, weight_map, state.solution);
-  mwis::lns_fragment<Graph> (*l_selector)(const decltype(l_state)&) =
-    mwis::fragment_selector<Graph, WeightMap>;
   mwis::lns_search<Graph, WeightMap> l_search(cliques.begin(), cliques.end());
 
-  search::large_neighborhood_search(l_state, l_selector, l_search, 10);
+  search::large_neighborhood_search(
+    l_state,
+    mwis::fragment_selector<Graph, WeightMap>,
+    l_search, 10);
   std::cout << "\n";
 
   for (std::size_t i = 0; i < l_state.solution.size(); i++)