Index: external/fastjet/tools/Recluster.hh
===================================================================
--- external/fastjet/tools/Recluster.hh	(revision 35cdc461e095e63247ab9dded070d76bc2c888e2)
+++ external/fastjet/tools/Recluster.hh	(revision d3f950fa9abc5095722ce530f462288bd152e74e)
@@ -2,5 +2,5 @@
 #define __FASTJET_TOOLS_RECLUSTER_HH__
 
-// $Id: Recluster.hh 3632 2014-08-15 10:42:53Z salam $
+// $Id: Recluster.hh 3714 2014-09-30 09:47:31Z soyez $
 //
 // Copyright (c) 2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
@@ -38,4 +38,5 @@
 
 //----------------------------------------------------------------------
+/// @ingroup tools_generic
 /// \class Recluster
 /// Recluster a jet's constituents with a new jet definition.
Index: external/fastjet/tools/Subtractor.cc
===================================================================
--- external/fastjet/tools/Subtractor.cc	(revision 35cdc461e095e63247ab9dded070d76bc2c888e2)
+++ external/fastjet/tools/Subtractor.cc	(revision d3f950fa9abc5095722ce530f462288bd152e74e)
@@ -1,4 +1,4 @@
 //FJSTARTHEADER
-// $Id: Subtractor.cc 3594 2014-08-12 15:25:11Z soyez $
+// $Id: Subtractor.cc 3670 2014-09-08 14:17:59Z soyez $
 //
 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
@@ -43,10 +43,21 @@
 // ctor
 Subtractor::Subtractor(double rho) : _bge(0), _rho(rho) {
-  assert(_rho>0.0);
+  if (_rho<0.0) throw Error("Subtractor(rho) was passed a negative rho value; rho should be >= 0");
   set_defaults();
 }
 
 //----------------------------------------------------------------------
+// ctor
+Subtractor::Subtractor(double rho, double rho_m) : _bge(0), _rho(rho) {
+  if (_rho<0.0) throw Error("Subtractor(rho, rho_m) was passed a negative rho value; rho should be >= 0");
+  if (rho_m<0.0) throw Error("Subtractor(rho, rho_m) was passed a negative rho_m value; rho_m should be >= 0");
+  set_defaults();
+  _rho_m = rho_m;
+  set_use_rho_m(true);
+}
+
+//----------------------------------------------------------------------
 void Subtractor::set_defaults(){
+  _rho_m = _invalid_rho;
   _use_rho_m = false; // likely to change in future releases!!
   _safe_mass = false; // likely to change in future releases!!
@@ -60,5 +71,5 @@
 PseudoJet Subtractor::result(const PseudoJet & jet) const {
   if (!jet.has_area()){
-    throw Error("Trying to subtract a jet without area support");
+    throw Error("Subtractor::result(...): Trying to subtract a jet without area support");
   }
 
@@ -152,4 +163,5 @@
     ostringstream ostr;
     ostr << "Subtractor that uses a fixed value of rho = " << _rho;
+    if (use_rho_m()) ostr << " and rho_m = " << _rho_m;
     return ostr.str();
   } else {
@@ -169,5 +181,5 @@
     rho = _rho;
   } else {
-    throw Error("default Subtractor does not have any information about the background, which is needed to perform the subtraction");
+    throw Error("Subtractor::_amount_to_subtract(...): default Subtractor does not have any information about the background, needed to perform the subtraction");
   }
 
@@ -178,11 +190,20 @@
 
   // add an optional contribution from the unknown particles masses
-  if (_use_rho_m){
-    assert(_bge != 0); // test done in "set_use_rho_m()"
-    to_subtract += _bge->rho_m(jet) * PseudoJet(0.0, 0.0, area.pz(), area.E());
+  if (_use_rho_m) {
+    double rho_m;
+    
+    if (_bge != 0) {
+      if (!_bge->has_rho_m()) throw Error("Subtractor::_amount_to_subtract(...): requested subtraction with rho_m from a background estimator, but the estimator does not have rho_m support");
+      rho_m = _bge->rho_m(jet);
+    } else if (_rho_m != _invalid_rho) {
+      rho_m = _rho_m;
+    } else {
+      throw Error("Subtractor::_amount_to_subtract(...): default Subtractor does not have any information about the background rho_m, needed to perform the rho_m subtraction");
+    }
+    to_subtract += rho_m * PseudoJet(0.0, 0.0, area.pz(), area.E());
   } else if (_bge && 
              _bge->has_rho_m() && 
              _bge->rho_m(jet) > rho_m_warning_threshold * rho) {
-    _unused_rho_m_warning.warn("Background estimator indicates non-zero rho_m, but use_rho_m()==false in subtractor; consider calling set_use_rho_m(true) to include the rho_m information");
+    _unused_rho_m_warning.warn("Subtractor::_amount_to_subtract(...): Background estimator indicates non-zero rho_m, but use_rho_m()==false in subtractor; consider calling set_use_rho_m(true) to include the rho_m information");
   }
 
Index: external/fastjet/tools/Subtractor.hh
===================================================================
--- external/fastjet/tools/Subtractor.hh	(revision 35cdc461e095e63247ab9dded070d76bc2c888e2)
+++ external/fastjet/tools/Subtractor.hh	(revision d3f950fa9abc5095722ce530f462288bd152e74e)
@@ -1,4 +1,4 @@
 //FJSTARTHEADER
-// $Id: Subtractor.hh 3584 2014-08-12 12:40:10Z soyez $
+// $Id: Subtractor.hh 3670 2014-09-08 14:17:59Z soyez $
 //
 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
@@ -32,4 +32,5 @@
 #define __FASTJET_TOOLS_SUBTRACTOR_HH__
 
+#include "fastjet/internal/base.hh"     // namespace macros (include explicitly to help Doxygen)
 #include "fastjet/tools/Transformer.hh" // to derive Subtractor from Transformer
 #include "fastjet/tools/BackgroundEstimatorBase.hh" // used as a ctor argument
@@ -69,4 +70,8 @@
   Subtractor(double rho);
 
+  /// define a subtractor that uses a fixed value of rho and rho_m;
+  /// both must be >= 0;
+  Subtractor(double rho, double rho_m);
+
   /// default constructor
   Subtractor() : _bge(0), _rho(_invalid_rho) { set_defaults(); }
@@ -96,6 +101,6 @@
   /// in a future release of FastJet
   void set_use_rho_m(bool use_rho_m_in = true){
-    if (_bge == 0) {
-      throw Error("Subtractor: rho_m support works only for Subtractors constructed with background estimator");
+    if (_bge == 0  && _rho_m < 0) {
+      throw Error("Subtractor: rho_m support works only for Subtractors constructed with a background estimator or an explicit rho_m value");
     }
     _use_rho_m=use_rho_m_in;
@@ -176,6 +181,6 @@
   /// if has to be mutable in case its underlying selector takes a reference jet
   mutable BackgroundEstimatorBase * _bge;
-  /// the fixed value of rho to use if the user has selected that option
-  double _rho;
+  /// the fixed value of rho and/or rho_m to use if the user has selected that option
+  double _rho, _rho_m;
 
   // configuration parameters/flags
