diff --git a/Particle/pdtNew.table b/Particle/pdtNew.table
index a92cef845f353a28e32075ad021340964bca074e..d10bfeedea1f126f6feba5bb50f2044b0424c005 100644
--- a/Particle/pdtNew.table
+++ b/Particle/pdtNew.table
@@ -61,6 +61,7 @@ Meson f2(1900) 		f_2(1900)  		0  4  1  1  1  	0  0  0  0 	1.900 	0.1750 	relBW	[
 Meson etaHat(1600) 	\hat{\eta}_(1600)  	0  0 -1 -1  1  	0  0  0  0 	1.600 	0.3000 	relBW	[0^{--} state]
 Meson f0Hat(1600) 	\hat{f}_0(1600)  	0  0  1 -1  1  	0  0  0  0 	1.600 	0.3000 	relBW	[0^{+-} state]
 Meson f2Hat(1800) 	\hat{f}_2(1800)  	0  4  1 -1  1   0  0  0  0 	1.800 	0.3000 	relBW	[2^{+-} state]
+Meson eta1(1400) 	\eta1(1400)  	        0  2 -1  1  1   0  0  0  0 	1.400 	0.300 	relBW	[exotic state]
 #
 # End light unflavoured mesons with Isospin 0    
 #
diff --git a/PwaUtils/AbsDynamics.cc b/PwaUtils/AbsDynamics.cc
index dd84165666a56d8b3c1acf520cd3ee978bf97f1b..0c4a545bc24c763d52c97cd637f09144b9053e95 100644
--- a/PwaUtils/AbsDynamics.cc
+++ b/PwaUtils/AbsDynamics.cc
@@ -41,6 +41,7 @@ AbsDynamics::AbsDynamics(std::string& name, std::vector<Particle*>& fsParticles,
   ,_mother(mother)
   ,_dynKey(FunctionUtils::particleListName(fsParticles))
   ,_grandmaKey("default")
+  ,_isLdependent(true)
 {
   if(0!=mother) _massKey=mother->name(); 
 }
diff --git a/PwaUtils/AbsDynamics.hh b/PwaUtils/AbsDynamics.hh
index e80fd8e392d947c3388c1a1c66cbc7d0e4c41cfa..ee80eb4955aa1265f9ba3655c5568ea10d90224c 100644
--- a/PwaUtils/AbsDynamics.hh
+++ b/PwaUtils/AbsDynamics.hh
@@ -56,6 +56,7 @@ public:
   virtual void setMassKey(std::string& theMassKey){_massKey=theMassKey;}
   virtual void addGrandMa(std::shared_ptr<AbsDecay> theDec) {;}
   virtual const std::string& grandMaKey(AbsXdecAmp* grandmaAmp){return _grandmaKey;}
+  virtual bool isLdependent() {return _isLdependent;}
 
 protected:
   std::string _name;
@@ -66,6 +67,7 @@ protected:
   std::mutex theMutex;
   std::string _dynKey;
   std::string _grandmaKey;
+  bool _isLdependent;
 private:
 
 };
diff --git a/PwaUtils/BlattWBarrierDynamics.cc b/PwaUtils/BlattWBarrierDynamics.cc
index d879d2fe1a54efd30699580d6963985da5f3bb39..feec0f7fa2e31392eefe9d880af0258bb27b2fee 100644
--- a/PwaUtils/BlattWBarrierDynamics.cc
+++ b/PwaUtils/BlattWBarrierDynamics.cc
@@ -45,6 +45,7 @@ BlattWBarrierDynamics::BlattWBarrierDynamics(std::string& name, std::vector<Part
 {
   Info << "BlattWBarrierDynamics for " << _name <<endmsg;
   if(GlobalEnv::instance()->parser()->fitqRProduction()) _fitqRVals=true;
+  _isLdependent=true;
 }
 
 BlattWBarrierDynamics::~BlattWBarrierDynamics()
diff --git a/PwaUtils/BlattWBarrierTensorDynamics.cc b/PwaUtils/BlattWBarrierTensorDynamics.cc
index feafe06db6584c2cc26e58ae13f7bcec549c3a94..824329d51a39e5607bd92fc1fb4328605d423f77 100644
--- a/PwaUtils/BlattWBarrierTensorDynamics.cc
+++ b/PwaUtils/BlattWBarrierTensorDynamics.cc
@@ -36,6 +36,7 @@
 BlattWBarrierTensorDynamics::BlattWBarrierTensorDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother, const std::string& wignerDKey, double qR) :
   BlattWBarrierDynamics(name, fsParticles, mother, wignerDKey, qR)
 {
+  _isLdependent=true;
 }
 
 BlattWBarrierTensorDynamics::~BlattWBarrierTensorDynamics()
diff --git a/PwaUtils/BreitWignerBlattWRelDynamics.cc b/PwaUtils/BreitWignerBlattWRelDynamics.cc
index fe7a3fe0182fb862981144ec5f412a112d3514ff..f082ccfced8daee9cd2a76218ac8bda75b1093d6 100644
--- a/PwaUtils/BreitWignerBlattWRelDynamics.cc
+++ b/PwaUtils/BreitWignerBlattWRelDynamics.cc
@@ -38,6 +38,7 @@ BreitWignerBlattWRelDynamics::BreitWignerBlattWRelDynamics(std::string& name, st
   BreitWignerRelDynamics(name, fsParticles, mother, massSumDaughter1, massSumDaughter2)
   ,_qR(qR)
 {
+  _isLdependent=true;
 }
 
 BreitWignerBlattWRelDynamics::~BreitWignerBlattWRelDynamics()
diff --git a/PwaUtils/BreitWignerDynamics.cc b/PwaUtils/BreitWignerDynamics.cc
index a89da423394cbd1b855923fdb13872c8b7cf7e52..e1f60df5a88313e12d21375d096aa626ffa67f48 100644
--- a/PwaUtils/BreitWignerDynamics.cc
+++ b/PwaUtils/BreitWignerDynamics.cc
@@ -37,6 +37,7 @@
 BreitWignerDynamics::BreitWignerDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother) :
   AbsDynamics(name, fsParticles, mother)
 {
+  _isLdependent=false;
 }
 
 BreitWignerDynamics::~BreitWignerDynamics()
diff --git a/PwaUtils/FlatteDynamics.cc b/PwaUtils/FlatteDynamics.cc
index e258091123a8c2fe6dd553bcea050e95cc32777b..ec0074ecf7e306d08495309b3dfb542b394dbcd9 100644
--- a/PwaUtils/FlatteDynamics.cc
+++ b/PwaUtils/FlatteDynamics.cc
@@ -62,6 +62,7 @@ FlatteDynamics::FlatteDynamics(std::string& key, std::vector<Particle*>& fsParti
   _g22Key=_massKey+secondPair1stPartStr+secondPair2ndPartStr;  
 
   _flattePtr=std::shared_ptr<Flatte>(new Flatte(decPair1stChannel, decPair2ndChannel));
+  _isLdependent=false;
 }
 
 FlatteDynamics::~FlatteDynamics()
diff --git a/PwaUtils/K0star1430LassDynamics.cc b/PwaUtils/K0star1430LassDynamics.cc
index 2cc1744b468e88b07f316cfc71b692fb0c204543..aaf0eee999861bf0b69269c1ded7a9408ba7ab8e 100644
--- a/PwaUtils/K0star1430LassDynamics.cc
+++ b/PwaUtils/K0star1430LassDynamics.cc
@@ -45,6 +45,7 @@ K0star1430LassDynamics::K0star1430LassDynamics(std::string& name, std::vector<Pa
   ,_RLASSKey(_massKey+"RLASS_PosNeg")
   ,_phiRKey(_massKey+"phiR_PosNeg")
 {
+  _isLdependent=false;
 }
 
 K0star1430LassDynamics::~K0star1430LassDynamics()
diff --git a/PwaUtils/KMatrixDynamics.cc b/PwaUtils/KMatrixDynamics.cc
index 0425b89598856fca0bcd55923fd00cbb48d1a49b..baf51002291f00ab635b27605e2880438f5dd935 100644
--- a/PwaUtils/KMatrixDynamics.cc
+++ b/PwaUtils/KMatrixDynamics.cc
@@ -56,6 +56,7 @@ KMatrixDynamics::KMatrixDynamics(std::string& name, std::vector<Particle*>& fsPa
   ,_kMatrixParser(new KMatrixParser(pathToConfigParser))
 {
   init();
+  _isLdependent=false;
 }
 
 KMatrixDynamics::~KMatrixDynamics()
diff --git a/PwaUtils/KPiSWaveIso12Dynamics.cc b/PwaUtils/KPiSWaveIso12Dynamics.cc
index 1942642c05a63dfc02ba7c9854e69345cc60845b..838d51641d5a4b3ff8db409571d901d73d6c94d7 100644
--- a/PwaUtils/KPiSWaveIso12Dynamics.cc
+++ b/PwaUtils/KPiSWaveIso12Dynamics.cc
@@ -42,6 +42,7 @@ KPiSWaveIso12Dynamics::KPiSWaveIso12Dynamics(std::string& name, std::vector<Part
   AbsDynamics(name, fsParticles, mother)
 {
   _kMatr =  std::shared_ptr<KMatrixKPiSFocus> (new KMatrixKPiSFocus(1));
+  _isLdependent=false;
 }
 
 KPiSWaveIso12Dynamics::~KPiSWaveIso12Dynamics()
diff --git a/PwaUtils/KPiSWaveIso32Dynamics.cc b/PwaUtils/KPiSWaveIso32Dynamics.cc
index 4e47cec2718d03cf4977248d45c43cb9c73dd715..0f2511c74655d24c3e82d7cbc0a7d7065bf2b781 100644
--- a/PwaUtils/KPiSWaveIso32Dynamics.cc
+++ b/PwaUtils/KPiSWaveIso32Dynamics.cc
@@ -42,6 +42,7 @@ KPiSWaveIso32Dynamics::KPiSWaveIso32Dynamics(std::string& name, std::vector<Part
   AbsDynamics(name, fsParticles, mother)
 {
   _kMatr =  std::shared_ptr<KMatrixKPiSFocus> (new KMatrixKPiSFocus(3));
+  _isLdependent=false;
 }
 
 KPiSWaveIso32Dynamics::~KPiSWaveIso32Dynamics()
diff --git a/PwaUtils/LSDecNonRefAmps.cc b/PwaUtils/LSDecNonRefAmps.cc
index b228d43e83cd888e7514b11f64e4f35ccd570d6f..33c82859eba7a07ac119950aa879b2aa55f4ef1d 100644
--- a/PwaUtils/LSDecNonRefAmps.cc
+++ b/PwaUtils/LSDecNonRefAmps.cc
@@ -41,12 +41,22 @@
 
 LSDecNonRefAmps::LSDecNonRefAmps(std::shared_ptr<IsobarLSDecay> theDec, ChannelID channelID) :
   AbsLSDecAmps(theDec, channelID)
+  ,_Smax(0)
 {
+  std::vector< std::shared_ptr<const LScomb> >::iterator it;
+  for (it=_LSs.begin(); it!=_LSs.end(); ++it){
+    if( (*it)->S > _Smax ) _Smax=(*it)->S;
+  }
 }
 
 LSDecNonRefAmps::LSDecNonRefAmps(std::shared_ptr<AbsDecay> theDec, ChannelID channelID) :
   AbsLSDecAmps(theDec, channelID)
+  ,_Smax(0)
 {
+  std::vector< std::shared_ptr<const LScomb> >::iterator it;
+  for (it=_LSs.begin(); it!=_LSs.end(); ++it){
+    if( (*it)->S > _Smax ) _Smax=(*it)->S;
+  }
 }
 
 LSDecNonRefAmps::~LSDecNonRefAmps()
@@ -78,6 +88,8 @@ complex<double> LSDecNonRefAmps::XdecPartAmp(Spin& lamX, Spin& lamDec, short fix
   }
 
   result=lsLoop( grandmaAmp, lamX, theData, _lam1Min, _lam1Max, _lam2Min, _lam2Max, false);
+  result*=_preFactor*_isospinCG;
+  if (!_absDyn->isLdependent()) result *=_absDyn->eval(theData, grandmaAmp);
 
   return result;
 }
@@ -111,6 +123,8 @@ complex<double> LSDecNonRefAmps::XdecAmp(Spin& lamX, EvtData* theData, Spin& lam
 
 
   result=lsLoop(grandmaAmp, lamX, theData, _lam1Min, _lam1Max, _lam2Min, _lam2Max, true, lamFs);
+  result*=_preFactor*_isospinCG;
+  if (!_absDyn->isLdependent()) result *=_absDyn->eval(theData, grandmaAmp);
 
   if ( _cacheAmps){
      theMutex.lock();
@@ -133,44 +147,30 @@ complex<double> LSDecNonRefAmps::lsLoop(AbsXdecAmp* grandmaAmp, Spin& lamX, EvtD
  
   complex<double> result(0.,0.);
 
-  //  map<Spin,complex<double> >& currentWignerDsMap=theData->WignerDsString.at(_wignerDKey).at(_JPCPtr->J).at(lamX);
-  //  Spin currentJ=_JPCPtr->J;
-  //  std::map<Id3StringType, complex<double> >& currentWignerDMap=theData->WignerDStringStringId.at(_wignerDKey).at(refKey);
-
-  std::map<Id3StringType, complex<double> >& currentWignerDMap=theData->WignerDStringId.at(_wignerDKey);
-
   std::vector< std::shared_ptr<const LScomb> >::iterator it;
-  for (it=_LSs.begin(); it!=_LSs.end(); ++it){
+  std::map<Id3StringType, complex<double> >& currentWignerDMap=theData->WignerDStringId.at(_wignerDKey);
 
-    map<Spin,map<Spin, double > >& currentCgFactor=_cgPreFactor.at(*it);
-
-    double theMag=_currentParamMags.at(*it);
-    double thePhi=_currentParamPhis.at(*it);
-    complex<double> expi(cos(thePhi), sin(thePhi));
-
-    complex<double> tmpResult(0.,0.);
-    for(Spin lambda1=lam1Min; lambda1<=lam1Max; ++lambda1){
-      for(Spin lambda2=lam2Min; lambda2<=lam2Max; ++lambda2){
-	Spin lambda = lambda1-lambda2;
-	if( fabs(lambda)>_JPCPtr->J || fabs(lambda)>(*it)->S) continue;
-	Id3StringType IdJLamXLam12=FunctionUtils::spin3Index(_J, lamX, lambda);
-	complex<double> amp = theMag*expi*currentCgFactor.at(lambda1).at(lambda2)*conj(currentWignerDMap.at(IdJLamXLam12));
-	//	complex<double> amp = theMag*expi*currentCgFactor.at(lambda1).at(lambda2)*conj(currentWignerDsMap.at(lambda));
-      	if(withDecs) amp *=daughterAmp(lambda1, lambda2, theData, lamFs);
-	tmpResult+=amp;
+  for(Spin lambda1=lam1Min; lambda1<=lam1Max; ++lambda1){
+    for(Spin lambda2=lam2Min; lambda2<=lam2Max; ++lambda2){
+      Spin lambda = lambda1-lambda2;
+      if( fabs(lambda)>_JPCPtr->J || fabs(lambda)>_Smax) continue;
+      
+      complex<double> amp(0.,0.);     
+      for (it=_LSs.begin(); it!=_LSs.end(); ++it){
+	if( fabs(lambda)>(*it)->S) continue;
+	double theMag=_currentParamMags.at(*it);
+	double thePhi=_currentParamPhis.at(*it);
+	complex<double> expi(cos(thePhi), sin(thePhi));
+	if (_absDyn->isLdependent()) amp+=theMag*expi*_cgPreFactor.at(*it).at(lambda1).at(lambda2)*_absDyn->eval(theData, grandmaAmp, (*it)->L);
+	else amp+=theMag*expi*_cgPreFactor.at(*it).at(lambda1).at(lambda2);
       }
+      Id3StringType IdJLamXLam12=FunctionUtils::spin3Index(_J, lamX, lambda);
+      amp *= conj(currentWignerDMap.at(IdJLamXLam12));
+      if(withDecs) amp *=daughterAmp(lambda1, lambda2, theData, lamFs);
+      result+=amp;    
     }
-
-    tmpResult*=_absDyn->eval(theData, grandmaAmp, (*it)->L);
-
-    result+=tmpResult; 
   }
-
-  result*=_preFactor*_isospinCG;
-  // if(result.real()!=result.real()){
-  //   Alert << "result:\t" << result << endmsg;
-  //   exit(0);
-  // }
+  
   return result;
 }
 
diff --git a/PwaUtils/LSDecNonRefAmps.hh b/PwaUtils/LSDecNonRefAmps.hh
index a00d314f95513c6315e92b2dcdcc82ac082a7cad..c6bbd9127581286aa3aaaf7e30d284b2413c38df 100644
--- a/PwaUtils/LSDecNonRefAmps.hh
+++ b/PwaUtils/LSDecNonRefAmps.hh
@@ -63,6 +63,8 @@ public:
 protected:
   virtual complex<double> lsLoop(AbsXdecAmp* grandmaAmp, Spin& lamX, EvtData* theData, Spin& lam1Min, Spin& lam1Max, Spin& lam2Min, Spin& lam2Max, bool withDecs, Spin lamFs=0 );
 
+  Spin _Smax;
+
 private:
 
 
diff --git a/PwaUtils/PiPiSWaveASDynamics.cc b/PwaUtils/PiPiSWaveASDynamics.cc
index b7f15e17880c85c42fee1a8c43a80d61350bf110..3b8c4c94622d1fa15b39b5af43b98aac3737ca07 100644
--- a/PwaUtils/PiPiSWaveASDynamics.cc
+++ b/PwaUtils/PiPiSWaveASDynamics.cc
@@ -53,6 +53,7 @@ PiPiSWaveASDynamics::PiPiSWaveASDynamics(std::string& name, std::vector<Particle
   ,_kPoles(_KmatrixPiPiS->kpoles())
 {
   DebugMsg << "projection index is " << _projectionIndex << endmsg;
+  _isLdependent=false;
 }
 
 PiPiSWaveASDynamics::~PiPiSWaveASDynamics()
diff --git a/PwaUtils/VoigtDynamics.cc b/PwaUtils/VoigtDynamics.cc
index 1919e4e871a50b610cf678c00b1ab48afe523968..7d3499cf6662728e99268e0621fdbbe542aacd24 100644
--- a/PwaUtils/VoigtDynamics.cc
+++ b/PwaUtils/VoigtDynamics.cc
@@ -40,6 +40,7 @@ VoigtDynamics::VoigtDynamics(std::string& name, std::vector<Particle*>& fsPartic
   _voigtPtr(new Voigtian())
 {
   if(0!=mother) _massSigmaKey=_massKey+"Sigma";
+  _isLdependent=false;
 }
 
 VoigtDynamics::~VoigtDynamics()
diff --git a/PwaUtils/WoDynamics.cc b/PwaUtils/WoDynamics.cc
index e9ccd55d622a72f60b502566ea79f651bc331352..e8210d4bbbd238660d05828a4db8d927ad44b71d 100644
--- a/PwaUtils/WoDynamics.cc
+++ b/PwaUtils/WoDynamics.cc
@@ -35,6 +35,7 @@
 WoDynamics::WoDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother) :
   AbsDynamics(name, fsParticles, mother)
 {
+  _isLdependent=false;
 }
 
 WoDynamics::~WoDynamics()