diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
index 8b8e1751f10914a75d363afd6a30ef4b07f54406..7f0335b5b49a01f424f957d3505473cdea7833e1 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
@@ -142,6 +142,7 @@ namespace top {
 	m_makeRCJets(false),
 	m_makeVarRCJets(false),
 	m_useRCJSS(false),
+	m_useVarRCJSS(false),
 	m_met_met(0.),
         m_met_phi(0.)
     {
@@ -218,6 +219,7 @@ namespace top {
 	  boost::split(m_VarRCJetRho, config->VarRCJetRho(), boost::is_any_of(","));
 	  boost::split(m_VarRCJetMassScale, config->VarRCJetMassScale(), boost::is_any_of(","));
 
+	  m_useVarRCJSS=config->useVarRCJetSubstructure();
 	} // end make VarRC jets
 
 
@@ -816,7 +818,7 @@ namespace top {
 		  systematicTree->makeOutputVariable(m_VarRCjetsubBranches[VarRC+"_"+name+"_sub_e"],   VarRC+"sub_"+name+"_e");
 		  systematicTree->makeOutputVariable(m_VarRCjetsubBranches[VarRC+"_"+name+"_sub_mv2c10"], VarRC+"sub_"+name+"_mv2c10");
 		  
-		  if (m_useRCJSS){
+		  if (m_useVarRCJSS){
 		    systematicTree->makeOutputVariable(m_VarRCjetBranches["vrrcjet_"+name+"_pt"], "vrrcjet_"+name+"_pt" );
 		    systematicTree->makeOutputVariable(m_VarRCjetBranches["vrrcjet_"+name+"_eta"],"vrrcjet_"+name+"_eta");
 		    systematicTree->makeOutputVariable(m_VarRCjetBranches["vrrcjet_"+name+"_phi"],"vrrcjet_"+name+"_phi");
@@ -1259,7 +1261,7 @@ namespace top {
 	      m_particleLevelTreeManager->makeOutputVariable(m_VarRCjetsubBranchesParticle[VarRC+"_"+name+"_sub_phi"], VarRC+"sub_"+name+"_phi");
 	      m_particleLevelTreeManager->makeOutputVariable(m_VarRCjetsubBranchesParticle[VarRC+"_"+name+"_sub_e"],   VarRC+"sub_"+name+"_e");
 	      
-	      if (m_useRCJSS){
+	      if (m_useVarRCJSS){
 		m_particleLevelTreeManager->makeOutputVariable(m_VarRCjetBranchesParticle["vrrcjet_"+name+"_pt"], "vrrcjet_"+name+"_pt" );
 		m_particleLevelTreeManager->makeOutputVariable(m_VarRCjetBranchesParticle["vrrcjet_"+name+"_eta"],"vrrcjet_"+name+"_eta");
 		m_particleLevelTreeManager->makeOutputVariable(m_VarRCjetBranchesParticle["vrrcjet_"+name+"_phi"],"vrrcjet_"+name+"_phi");
@@ -2505,7 +2507,7 @@ namespace top {
 	      m_VarRCjetsubBranches[VarRC+"_"+name+"_sub_e"].resize(sizeOfRCjets, std::vector<float>());
 	      m_VarRCjetsubBranches[VarRC+"_"+name+"_sub_mv2c10"].resize(sizeOfRCjets, std::vector<float>());
 
-	      if (m_useRCJSS){
+	      if (m_useVarRCJSS){
 		m_VarRCjetBranches["vrrcjet_"+name+"_pt"].resize(sizeOfRCjets,-999.);
 		m_VarRCjetBranches["vrrcjet_"+name+"_eta"].resize(sizeOfRCjets,-999.);
 		m_VarRCjetBranches["vrrcjet_"+name+"_phi"].resize(sizeOfRCjets,-999.);
@@ -2557,7 +2559,7 @@ namespace top {
 		m_VarRCjetBranches[VarRC+"_"+name+"_d12"][i] = (VarRCSplit12.isAvailable(*rc_jet)) ? VarRCSplit12(*rc_jet) : -999.;
 		m_VarRCjetBranches[VarRC+"_"+name+"_d23"][i] = (VarRCSplit23.isAvailable(*rc_jet)) ? VarRCSplit23(*rc_jet) : -999.;
 
-		if (m_useRCJSS){
+		if (m_useVarRCJSS){
 		  m_VarRCjetBranches["vrrcjet_"+name+"_pt"][i]   =  (RRCJet_pt.isAvailable(*rc_jet))  ? RRCJet_pt(*rc_jet) : -999.;
 		  m_VarRCjetBranches["vrrcjet_"+name+"_eta"][i]  =  (RRCJet_eta.isAvailable(*rc_jet)) ? RRCJet_eta(*rc_jet) : -999.;
 		  m_VarRCjetBranches["vrrcjet_"+name+"_phi"][i]  =  (RRCJet_phi.isAvailable(*rc_jet)) ? RRCJet_phi(*rc_jet) : -999.;
@@ -3603,7 +3605,7 @@ namespace top {
 	      m_VarRCjetsubBranchesParticle[VarRC+"_"+name+"_sub_eta"].resize(sizeOfRCjets, std::vector<float>());
 	      m_VarRCjetsubBranchesParticle[VarRC+"_"+name+"_sub_phi"].resize(sizeOfRCjets, std::vector<float>());
 	      m_VarRCjetsubBranchesParticle[VarRC+"_"+name+"_sub_e"].resize(sizeOfRCjets, std::vector<float>());
-	      if (m_useRCJSS){
+	      if (m_useVarRCJSS){
 		m_VarRCjetBranchesParticle["vrrcjet_"+name+"_pt"].resize(sizeOfRCjets,-999.);
 		m_VarRCjetBranchesParticle["vrrcjet_"+name+"_eta"].resize(sizeOfRCjets,-999.);
 		m_VarRCjetBranchesParticle["vrrcjet_"+name+"_phi"].resize(sizeOfRCjets,-999.);
@@ -3654,7 +3656,7 @@ namespace top {
 		m_VarRCjetBranchesParticle[VarRC+"_"+name+"_d12"][i] = (VarRCSplit12.isAvailable(*rc_jet)) ? VarRCSplit12(*rc_jet) : -999.;
 		m_VarRCjetBranchesParticle[VarRC+"_"+name+"_d23"][i] = (VarRCSplit23.isAvailable(*rc_jet)) ? VarRCSplit23(*rc_jet) : -999.;
 
-		if (m_useRCJSS){
+		if (m_useVarRCJSS){
 		  m_VarRCjetBranchesParticle["vrrcjet_"+name+"_pt"][i]   =  (RRCJet_pt.isAvailable(*rc_jet))  ? RRCJet_pt(*rc_jet) : -999.;
 		  m_VarRCjetBranchesParticle["vrrcjet_"+name+"_eta"][i]  =  (RRCJet_eta.isAvailable(*rc_jet)) ? RRCJet_eta(*rc_jet) : -999.;
 		  m_VarRCjetBranchesParticle["vrrcjet_"+name+"_phi"][i]  =  (RRCJet_phi.isAvailable(*rc_jet)) ? RRCJet_phi(*rc_jet) : -999.;
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h
index 180bfea73378c21174567eab5a202967a97f51b6..00466867adcb9c6541f7e4665cc5217bb31ffe43 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h
@@ -580,6 +580,7 @@ private:
     bool m_makeRCJets; // making re-clustered jets
     bool m_makeVarRCJets; // making VarRC jets
     bool m_useRCJSS; // write RCJSS variables
+    bool m_useVarRCJSS; // write Variable-R RCJSS variables
     std::string m_RCJetContainer;       // name for RC jets container in TStore
     std::vector<std::string> m_VarRCJetRho;
     std::vector<std::string> m_VarRCJetMassScale;
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx
index b07a7f13eaff2c1cd07d24856c5cba93cab231a0..3cb8962617d9518067f90c3aa18de6003c51d496 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/ConfigurationSettings.cxx
@@ -130,6 +130,7 @@ ConfigurationSettings::ConfigurationSettings() : m_configured(false) {
     registerParameter("VarRCJetRho",       "Reclustered Jet (variable-R) list of rho values (). Default 2.",   "2");
     registerParameter("VarRCJetMassScale", "Reclustered Jet (variable-R) list of mass scale values (m_w,m_z,m_h,m_t). By default use all.",   "m_w,m_z,m_h,m_t");
     registerParameter("UseVarRCJets",      "Use Reclustered Jets (Variable-R Jets). Default False.", "False");
+    registerParameter("UseVarRCJetSubstructure", "Calculate Variable-R Reclustered Jet Substructure Variables. Default False",   "False");
 
     registerParameter("TauPt",
 		      "Pt cut applied to both tight and loose taus (in MeV)."
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx
index b2ace14f2c252ba02c593b15edaef7458f08eeed..dcd31f1bf7dfa840ddd13d68ccbe6d3f79e64f5c 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx
@@ -758,7 +758,11 @@ namespace top{
     this->VarRCJetMassScale(settings->value("VarRCJetMassScale"));
     if (settings->value("UseVarRCJets") == "True" || settings->value("UseVarRCJets") == "true")
       this->m_useVarRCJets = true;
-
+    if (settings->value("UseVarRCJetSubstructure") == "True" || settings->value("UseVarRCJetSubstructure") == "true")
+      this->m_useVarRCJetSubstructure = true;
+    else
+      this->m_useVarRCJetSubstructure = false;
+    
     // for top mass analysis, per default set to 1.0!
     m_JSF  = std::stof(settings->value("JSF"));
     m_bJSF = std::stof(settings->value("bJSF"));
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/TopConfiguration/TopConfig.h b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/TopConfiguration/TopConfig.h
index 32889e0eb10e66b3083dece7623e664e88d3bead..c4430497a82511c0f48b48367fd07302415a40ea 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/TopConfiguration/TopConfig.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/TopConfiguration/TopConfig.h
@@ -523,6 +523,7 @@ class TopConfig final {
   inline virtual float VarRCJetMaxRadius() const {return m_VarRCJetMaxRadius;}
   inline virtual const std::string& VarRCJetRho() const {return m_VarRCJetRho;}
   inline virtual const std::string& VarRCJetMassScale() const {return m_VarRCJetMassScale;}
+  inline virtual bool  useVarRCJetSubstructure() const {return m_useVarRCJetSubstructure;}
 
   inline virtual void VarRCJetPtcut(const float pt)      {if(!m_configFixed){m_VarRCJetPtcut = pt;}}
   inline virtual void VarRCJetEtacut(const float eta)    {if(!m_configFixed){m_VarRCJetEtacut = eta;}}
@@ -530,6 +531,7 @@ class TopConfig final {
   inline virtual void VarRCJetMaxRadius(const float radius) {if(!m_configFixed){m_VarRCJetMaxRadius = radius;}}
   inline virtual void VarRCJetRho(const std::string& rho) {if(!m_configFixed){m_VarRCJetRho = rho;}}
   inline virtual void VarRCJetMassScale(const std::string& mass_scale) {if(!m_configFixed){m_VarRCJetMassScale = mass_scale;}}
+  inline virtual void useVarRCJetSubstructure(const bool use) {if (!m_configFixed){m_useVarRCJetSubstructure = use;}}
 
   inline virtual void jetUncertainties_BunchSpacing( const std::string& s ){if(!m_configFixed){m_jetUncertainties_BunchSpacing = s;}}
   inline virtual const std::string& jetUncertainties_BunchSpacing() const {return m_jetUncertainties_BunchSpacing;}
@@ -1164,6 +1166,7 @@ class TopConfig final {
   float m_VarRCJetMaxRadius;
   std::string m_VarRCJetRho;
   std::string m_VarRCJetMassScale;
+  bool  m_useVarRCJetSubstructure;
 
   // these are needed for the top mass analysis, per default should be 1.0
   float m_JSF;
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC15.cxx
index 4f4ef6476f3b3dfd611d1f6d0860830fc5967699..0a319cc85fee35ac03c43bc2352d7cd358c55d5f 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC15.cxx
@@ -104,7 +104,7 @@ StatusCode RCJetMC15::initialize(){
         float m_scale = mass_scales.at(m_VarRCjets_mass_scale);
         m_massscale   = rho*m_scale*1e-3;                   // e.g., 2*m_top; in [GeV]!
 	
-	if (m_config->useRCJetSubstructure())m_useJSS=true;
+	m_useJSS=m_config->useVarRCJetSubstructure();
 	
     }
     else{
@@ -114,7 +114,7 @@ StatusCode RCJetMC15::initialize(){
         m_radius = std::stof( configSettings->value("RCJetRadius") ); // for initialize    
         m_minradius = -1.0;
         m_massscale = -1.0;
-	if (m_config->useRCJetSubstructure())m_useJSS=true;
+	m_useJSS=m_config->useRCJetSubstructure();
     }
     
     if (m_useJSS){
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelRCJetObjectLoader.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelRCJetObjectLoader.cxx
index 68e1572628e11dd2572f5f3ef1badf24af0d9d12..6388fd3a17afd0c9bf7fc9df92e81f4a465ef4db 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelRCJetObjectLoader.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelRCJetObjectLoader.cxx
@@ -84,7 +84,7 @@ StatusCode ParticleLevelRCJetObjectLoader::initialize(){
       float m_scale = mass_scales.at(m_VarRCjets_mass_scale);
       m_massscale   = rho*m_scale*1e-3;
       
-      if (m_config->useRCJetSubstructure())m_useJSS=true;        
+      m_useJSS=m_config->useVarRCJetSubstructure();        
     }
     else {
       m_ptcut  =  m_config->RCJetPtcut() ;     // for initialize [GeV] & passSelection
@@ -94,7 +94,7 @@ StatusCode ParticleLevelRCJetObjectLoader::initialize(){
       m_minradius = -1.0;
       m_massscale = -1.0;
       
-      if (m_config->useRCJetSubstructure())m_useJSS=true;
+      m_useJSS=m_config->useRCJetSubstructure();
     }