diff --git a/tracy/configure.ac b/tracy/configure.ac
index 39b994b8086062bedbb0652e85396bd46e32b85d..9be70ceec799013aa7a4370b832782f572983344 100644
--- a/tracy/configure.ac
+++ b/tracy/configure.ac
@@ -1,5 +1,5 @@
 # Process this file with autoconf to produce a configure script.
-AC_INIT([Tracy], [3.10], [nadolski@synchrotron-soleil.fr])
+AC_INIT([Tracy], [3.11], [nadolski@synchrotron-soleil.fr])
 # Set auxilliary directory for config files
 AC_CONFIG_AUX_DIR(config)
 
diff --git a/tracy/tracy/inc/t2elem.h b/tracy/tracy/inc/t2elem.h
index a24b7d0a3f77f74dbfd0aee41f00e39eb934ab79..127c34eb8ac40019a0bb0359986941362aa12d98 100644
--- a/tracy/tracy/inc/t2elem.h
+++ b/tracy/tracy/inc/t2elem.h
@@ -62,6 +62,9 @@ void Mpole_Pass(CellType &Cell, ss_vect<T> &x);
 template<typename T>
 void Marker_Pass(CellType &Cell, ss_vect<T> &X);
 
+template<typename T>
+void Aperture_Pass(CellType &Cell, ss_vect<T> &X);
+
 template<typename T>
 void Cav_Pass(CellType &Cell, ss_vect<T> &X);
 
@@ -125,6 +128,8 @@ void LinsTrans(Matrix &A, Vector &b);
 
 void Drift_Alloc(elemtype *Elem);
 
+void Aperture_Alloc(elemtype *Elem);
+
 void Mpole_Alloc(elemtype *Elem);
 
 void Cav_Alloc(elemtype *Elem);
@@ -156,6 +161,8 @@ void Cav_Init(int Fnum1);
 
 void Marker_Init(int Fnum1);
 
+void Aperture_Init(int Fnum1);
+
 void Insertion_Init(int Fnum1);
 
 void Spreader_Init(int Fnum1);
diff --git a/tracy/tracy/inc/tracy.h b/tracy/tracy/inc/tracy.h
index 6723865bbb0d484706a62648b5b1aaf6d9d3bec3..2c3c14ab32b2871a13a6bd50d38da7f7f0271fef 100644
--- a/tracy/tracy/inc/tracy.h
+++ b/tracy/tracy/inc/tracy.h
@@ -75,8 +75,8 @@ const double  max_ampl = 1.0; // [m]    soleil
 enum pthicktype { thick = 0, thin = 1 };
 
 enum PartsKind { drift = 0, Wigl = 1, Mpole = 2, Cavity = 3, marker = 4,
-		 undef = 5, Insertion = 6, FieldMap = 7,
-                 Spreader = 8, Recombiner = 9, Solenoid = 10 };
+		         undef = 5, Insertion = 6, FieldMap = 7,
+                 Spreader = 8, Recombiner = 9, Solenoid = 10, Aperture = 11};
 
 enum { All = 0, Dip = 1, Quad = 2, Sext = 3, Oct = 4, Dec = 5, Dodec = 6 };
 
diff --git a/tracy/tracy/inc/tracy_global.h b/tracy/tracy/inc/tracy_global.h
index afca82afe57dd1cb230451ebccc22c5904e618bb..8e858191aac14460934b93d675dfe2724a4c4a61 100644
--- a/tracy/tracy/inc/tracy_global.h
+++ b/tracy/tracy/inc/tracy_global.h
@@ -1,5 +1,5 @@
 #define PLANES 2
-#define BPM_MAX 120
+#define BPM_MAX 122
 
 typedef struct globvalrec {
   double        dPcommon,       // dp for numerical differentiation 
@@ -74,6 +74,10 @@ struct DriftType {
   Matrix D55; // Linear matrix
 };
 
+struct ApertureType {
+  double Aper[4][3]; // Aperture
+};
+
 
 struct MpoleType {
   int         Pmethod;   // Integration Method
@@ -249,6 +253,7 @@ struct elemtype {
     SpreaderType   *Spr; // Spreader
     RecombinerType *Rec; // Recombiner
     SolenoidType   *Sol; // Solenoid
+    ApertureType   *A;   // Asymmetric aperture
   };
 };
 
@@ -277,7 +282,7 @@ struct CellType {
   Matrix           A,           // Floquet space to phase space transformation
                    sigma;       // sigma matrix (redundant)
   Vector2          maxampl[PLANES]; /* Horizontal and vertical physical
-				       apertures:
-				         maxampl[X_][0] < x < maxampl[X_][1]
-					 maxampl[Y_][0] < y < maxampl[Y_][1] */
+				                 apertures:
+				                 maxampl[X_][0] < x < maxampl[X_][1]
+					             maxampl[Y_][0] < y < maxampl[Y_][1] */
 };
diff --git a/tracy/tracy/src/prtmfile.cc b/tracy/tracy/src/prtmfile.cc
index 3c18d3b68ad5bb67b4d613b60d61f55633f97224..d13439b30f7f8b46e1f81226c7b55343f8c4a9b1 100644
--- a/tracy/tracy/src/prtmfile.cc
+++ b/tracy/tracy/src/prtmfile.cc
@@ -18,6 +18,7 @@
  thin kick   3
  wiggler     4
  kick_map    6
+ aperture    11
 
  Integration methods:
 
@@ -72,6 +73,7 @@
 #define thinkick_  3
 #define wiggler_   4
 #define kick_map_  6
+#define aperture_  11
 
 /******************************************************************************
  void prtName(FILE *fp, const int i,
@@ -91,6 +93,7 @@
  thin kick       3
  wiggler         4
  kick_map        6
+ aperture        11
 
  method             integrated method
  N                  number of integration steps of the element
@@ -123,7 +126,7 @@ void prtName(FILE *fp, const int i, const int type, const int method,
  Input:
  fp               file name
  n_design         design order of multipole
- PB               multipole field components arry, format is: n Bn An
+ PB               multipole field components array, format is: n Bn An
  Order            maximum order of multipole
 
  Output:
@@ -148,6 +151,31 @@ void prtHOM(FILE *fp, const int n_design, const mpolArray PB, const int Order) {
   }
 }
 
+/******************************************************************************
+ void prtAper(FILE *fp, const mpolArray Aper)
+
+ Purpose:
+ Print out all field component for an Asymmetric aperture to a file
+
+ Input:
+ fp               file name
+ Aper             Aperture definition
+
+ Output:
+ None
+
+ Comments:
+ Called by prtmfile()
+ ******************************************************************************/
+void prtAper(FILE *fp, const double (*Aper)[3]) {
+  int i = 0;
+
+  for (i = 0; i <= 3; i++) {
+      fprintf(fp, "%23.16e %23.16e %23.16e\n", Aper[i][0], Aper[i][1],
+      Aper[i][2]);
+  }
+}
+
 /******************************************************************************
  void prtmfile(const char mfile_dat[])
 
@@ -216,6 +244,10 @@ void prtmfile(const char mfile_dat[]) {
     case marker:
       prtName(mfile, i, marker_, 0, 0);
       break;
+    case Aperture:
+      prtName(mfile, i, aperture_, 0, 0);
+      prtAper(mfile, Cell[i].Elem.A->Aper);
+      break;
     case Insertion:
       prtName(mfile, i, kick_map_, Cell[i].Elem.ID->Pmethod,
           Cell[i].Elem.ID->PN);
diff --git a/tracy/tracy/src/rdmfile.cc b/tracy/tracy/src/rdmfile.cc
index b3391c0e966ebcfb889dfc75320bee36bbe569b8..11c52d4d75b8f9a5bedd5df7e0ba2e3c4f7a1d15 100644
--- a/tracy/tracy/src/rdmfile.cc
+++ b/tracy/tracy/src/rdmfile.cc
@@ -75,7 +75,7 @@
 #define thinkick_  3
 #define wiggler_   4
 #define insertion_ 6
-
+#define aperture_ 11
 
 ifstream  inf;
 
@@ -113,6 +113,10 @@ void get_kind(const int kind, elemtype &Elem)
     Elem.Pkind = PartsKind(Insertion);
     Insertion_Alloc(&Elem);
     break;
+  case aperture_:
+    Elem.Pkind = PartsKind(Aperture);
+    Aperture_Alloc(&Elem);
+    break;
   default:
     cout << "get_kind: unknown type " << kind << " " << Elem.PName << endl;
     exit_(1);
diff --git a/tracy/tracy/src/soleillib.cc b/tracy/tracy/src/soleillib.cc
index d2448472e1b658d81ea176f23c10c3fcef5e0be3..726f4f6f6827e78471849ca7c0217ea86e9a3136 100644
--- a/tracy/tracy/src/soleillib.cc
+++ b/tracy/tracy/src/soleillib.cc
@@ -1737,7 +1737,7 @@ void TunesShiftWithEnergy(const char *NudpFile,long Nb, long Nbtour, double emax
        Trac_Simple6DCOD, Get_NAFF
 
    Comments:
-       1 December 2010, Call to a Tracking round around the 6D and not 4D closed orbit
+       1 December 2010, Call to a Tracking  around the 6D and not 4D closed orbit
 
 ****************************************************************************/
 void Phase(const char *phasefile, double x,double xp,double y, double yp,double energy, double ctau, long Nbtour)
@@ -3464,12 +3464,6 @@ void SetSkewQuad(void)
        nstepm       number of energy steps for negative momentum acceptance
 
 
-       * 1 grande section droite
-       * 13 entree premier bend
-       * 22 sortie SX4
-       * 41 section droite moyenne
-       * 173 fin superperiode
-
    Output:
        output file soleil.out : file of results
        output file phase.out : file of tracking results during the process
diff --git a/tracy/tracy/src/t2cell.cc b/tracy/tracy/src/t2cell.cc
index 925dc44413e4d68cbf83638500f1b15039b8b249..b334d7499dfb26c4d488100be79a8cfd609ae8b7 100644
--- a/tracy/tracy/src/t2cell.cc
+++ b/tracy/tracy/src/t2cell.cc
@@ -18,7 +18,7 @@ template<typename T>
 inline bool CheckAmpl(const ss_vect<T> &x, const long int loc)
 
   Purpose:
-     Check whether particle coordinate x are outside of 
+      Check whether particle coordinates x are outside of 
       the aperture limitation, then return the bool flag not_lost,
       if true, then beam is lost.
       
@@ -38,13 +38,13 @@ inline bool CheckAmpl(const ss_vect<T> &x, const long int loc)
   if (globval.Aperture_on)
     not_lost = is_double<T>::cst(x[x_]) > Cell[loc].maxampl[X_][0] &&
                is_double<T>::cst(x[x_]) < Cell[loc].maxampl[X_][1] && 
-	       is_double<T>::cst(x[y_]) > Cell[loc].maxampl[Y_][0]&&
+	           is_double<T>::cst(x[y_]) > Cell[loc].maxampl[Y_][0] &&
                is_double<T>::cst(x[y_]) < Cell[loc].maxampl[Y_][1];
   else
     not_lost = is_double<T>::cst(x[x_]) > -max_ampl &&
-               is_double<T>::cst(x[x_]) < max_ampl &&
-	       is_double<T>::cst(x[y_]) > -max_ampl&&
-               is_double<T>::cst(x[y_]) < max_ampl;
+               is_double<T>::cst(x[x_]) < +max_ampl &&
+	           is_double<T>::cst(x[y_]) > -max_ampl &&
+               is_double<T>::cst(x[y_]) < +max_ampl;
 
   // particle lost
   if (!not_lost) {
@@ -1009,6 +1009,10 @@ void Cell_Init(void)
           Marker_Init(i);
           break;
 
+        case Aperture:
+          Aperture_Init(i);
+          break;
+
         case Spreader:
           Spreader_Init(i);
           break;
diff --git a/tracy/tracy/src/t2elem.cc b/tracy/tracy/src/t2elem.cc
index 41310c50710fecb0d567b7c749b895a3b258b905..6de56a29d7d97a8f822a8bba0be320f66e8fdbd1 100644
--- a/tracy/tracy/src/t2elem.cc
+++ b/tracy/tracy/src/t2elem.cc
@@ -1116,6 +1116,33 @@ void Mpole_Pass(CellType &Cell, ss_vect<T> &x) {
     LtoG(x, Cell.dS, Cell.dT, M->Pc0, M->Pc1, M->Ps1);
 }
 
+/****************************************************************************
+ * void Marker_Pass(CellType *Cell, double *X)
+
+ Purpose:
+ Tracking through a marker: identity
+
+ Input:
+ Cell marker element to track through
+ X    input coordinates
+
+ Output:
+ X output coordinates
+
+ Return:
+ none
+
+ Global variables:
+ none
+
+ Specific functions:
+ none
+
+ Comments:
+ none
+
+ ****************************************************************************/
+
 template<typename T>
 void Marker_Pass(CellType &Cell, ss_vect<T> &X) {
     elemtype *elemp;
@@ -1127,6 +1154,76 @@ void Marker_Pass(CellType &Cell, ss_vect<T> &X) {
     LtoG(X, Cell.dS, Cell.dT, 0.0, 0.0, 0.0);
 }
 
+/****************************************************************************
+ * void Aperture_Pass(CellType *Cell, double *X)
+
+ Purpose:
+ Tracking through a Aperture: identity
+
+ Input:
+ Cell marker element to track through
+ X    input coordinates
+
+ Output:
+ X output coordinates
+
+ Return:
+ none
+
+ Global variables:
+ none
+
+ Specific functions:
+ none
+
+ Comments:
+ none
+
+ ****************************************************************************/
+
+template<typename T>
+void Aperture_Pass(CellType &Cell, ss_vect<T> &X) {
+    elemtype *elemp;
+    ApertureType *A;
+    bool outofrange = false;
+
+    bool trace = true;
+    
+    elemp = &Cell.Elem;
+    A = elemp->A;
+
+    /* Global -> Local */
+    GtoL(X, Cell.dS, Cell.dT, 0.0, 0.0, 0.0);
+    
+    /* horizontal plane aperture */
+    if (X[y_] < A->Aper[0][1] & X[y_] > A->Aper[0][2])
+    	if (X[x_] > A->Aper[0][0]) {outofrange = true;}
+    if (X[y_] < A->Aper[1][1] & X[y_] > A->Aper[1][2])
+    	if (X[x_] > A->Aper[1][0]) {outofrange = true;}
+    
+    if (trace)
+    cout << "X[y_] " << X[y_] << endl;
+    
+    if (outofrange) {
+      X[x_] = NAN;
+      return;
+    }
+    
+    /* vertical plane aperture */
+    if (X[x_] < A->Aper[2][1] & X[x_] > A->Aper[2][2])
+    	if (X[y_] > A->Aper[2][0]) {outofrange = true;}
+    if (X[x_] < A->Aper[3][1] & X[x_] > A->Aper[3][2])
+    	if (X[y_] > A->Aper[3][0]) {outofrange = true;}
+    
+    if (outofrange) {
+      X[y_] = NAN;
+      return;
+    }
+    
+    /* Local -> Global */
+    LtoG(X, Cell.dS, Cell.dT, 0.0, 0.0, 0.0);
+}
+
 /****************************************************************************
  * void Cav_Pass(CellType *Cell, double *X)
 
@@ -2019,7 +2116,7 @@ void sol_pass(const elemtype &elem, ss_vect<T> &x) {
 
         x[px_] -= dpx;
         x[py_] -= AyoBrho;
-        x[y_] += 0.5 * hd * x[py_];
+        x[y_]  += 0.5 * hd * x[py_];
         x[ct_] += sqr(0.5) * hd * sqr(x[py_]) / (1.0 + x[delta_]);
 
         AyoBrho = elem.Sol->BoBrho * x[x_] / 2.0;
@@ -3467,6 +3564,83 @@ void Drift_Alloc(elemtype *Elem) {
     Elem->D = (DriftType *) malloc(sizeof(DriftType));
 }
 
+/****************************************************************************
+ * void Aperture_Alloc(elemtype *Elem)
+
+ Purpose:
+ Dynamic memory allocation for asymmetric aperture element
+
+ Input:
+ Pointer on element
+
+ Output:
+ none
+ 
+ Return:
+ none
+
+ Global variables:
+ none
+
+ Specific functions:
+ none
+
+ Comments:
+ none
+
+ ****************************************************************************/
+ void Aperture_Alloc(elemtype *Elem) {
+
+    ApertureType *A;;
+
+    /* Memory allocation */
+    Elem->A = (ApertureType *) malloc(sizeof(ApertureType));
+    A = Elem->A;
+    
+    A->Aper[0][0] = +1.0;
+    A->Aper[0][1] = -1.0;
+    A->Aper[0][2] = +1.0;
+
+    A->Aper[1][0] = -1.0;
+    A->Aper[1][1] = -1.0;
+    A->Aper[1][2] = +1.0;
+
+    A->Aper[2][0] = +1.0;
+    A->Aper[2][1] = -1.0;
+    A->Aper[2][2] = +1.0;
+      
+    A->Aper[3][0] = -1.0;
+    A->Aper[3][1] = -1.0;
+    A->Aper[3][2] = +1.0;
+
+}
+
+/****************************************************************************
+ * void Multipole_Alloc(elemtype *Elem)
+
+ Purpose:
+ Dynamic memory allocation for multipole element
+
+ Input:
+ Pointer on element
+
+ Output:
+ memory  space for drift in Elem->UU.D
+
+ Return:
+ none
+
+ Global variables:
+ none
+
+ Specific functions:
+ none
+
+ Comments:
+ none
+
+ ****************************************************************************/
+
 void Mpole_Alloc(elemtype *Elem) {
     int j;
     MpoleType *M;
@@ -4043,6 +4217,31 @@ void Cav_Init(int Fnum1) {
     }
 }
 
+/****************************************************************************
+ * void Marker_Init(long Fnum1)
+
+ Purpose: called by Cell_Init()
+ Constructor for a marker
+
+ Input:
+ Fnum1 Family number
+
+ Output:
+ none
+
+ Return:
+ none
+
+ Global variables:
+ ElemFam, Cell
+
+ Specific functions:
+ none
+
+ Comments:
+ none
+
+ ****************************************************************************/
 void Marker_Init(int Fnum1) {
     int i;
     ElemFamType *elemfamp;
@@ -4054,11 +4253,62 @@ void Marker_Init(int Fnum1) {
     for (i = 0; i < elemfamp->nKid; i++) {
         cellp = &Cell[elemfamp->KidList[i]];
         cellp->Elem = elemfamp->ElemF;
+        cellp->dT[0] = 1.0;
+        cellp->dT[1] = 0.0;
+        cellp->dS[0] = 0.0;
+        cellp->dS[1] = 0.0;
+   }
+}
+    
+/****************************************************************************
+ * void Aperture_Init(long Fnum1)
+
+ Purpose: called by Cell_Init()
+ Constructor for a cavity
+ set aperture dimensions read from the lattice file
+
+ Input:
+ Fnum1 Family number
+
+ Output:
+ none
+
+ Return:
+ none
+
+ Global variables:
+ ElemFam, Cell
+
+ Specific functions:
+ none
+
+ Comments:
+ none
+
+ ****************************************************************************/
+
+void Aperture_Init(int Fnum1) {
+    int i;
+    ElemFamType *elemfamp;
+    CellType *cellp;
+    elemtype *elemp;
+
+    /* Pointer on element */    
+    elemfamp = &ElemFam[Fnum1 - 1];
+    elemp = &elemfamp->ElemF;
+    for (i = 0; i < elemfamp->nKid; i++) {
+        cellp = &Cell[elemfamp->KidList[i]];
+        cellp->Elem = elemfamp->ElemF;
+        /* Memory allocation and set everything to zero */
+        Aperture_Alloc(&cellp->Elem);
+        memcpy(cellp->Elem.PName, elemfamp->ElemF.PName, sizeof(partsName));
+
         cellp->dT[0] = 1.0;
         cellp->dT[1] = 0.0;
         cellp->dS[0] = 0.0;
         cellp->dS[1] = 0.0;
     }
+
 }
 
 /****************************************************************************
diff --git a/tracy/tracy/src/t2lat.cc b/tracy/tracy/src/t2lat.cc
index 3fc6f6f007d647b9f6dc988172d37e824f80ec7f..4c76fd2d8e4e8cd0aa5282a270e6506a0f8220ae 100644
--- a/tracy/tracy/src/t2lat.cc
+++ b/tracy/tracy/src/t2lat.cc
@@ -47,7 +47,7 @@ typedef enum
   gapsym, thksym, invsym, thnsym,
   endsym, tsksym, bemsym, corsym, prnsym, tblsym, possym, prmsym,
   udisym, squote, linsym, mthsym, celsym, matsym, cavsym, symsym, chmsym,
-  cctsym, usesym, andsym, dspsym, kicksym, wglsym, nsym, mrksym,
+  cctsym, usesym, aprsym, apersym, andsym, dspsym, kicksym, wglsym, nsym, mrksym,
   nbdsym, frgsym, latsym, mpsym, dbnsym, kssym, homsym, lmdsym, dtsym, xytsym,
   vrfsym, harnumsym, frqsym, gstsym, typsym, rollsym, idsym,
   fnamesym1, fnamesym2, scalingsym1, scalingsym2, fmsym, harmsym, sprsym, recsym, solsym,
@@ -1732,7 +1732,7 @@ struct LOC_Lat_DealElement
   Lat_symbol  *ksy;
   Lat_symbol  *sps;
   jmp_buf     _JL9999;
-  double      B[HOMmax+HOMmax+1];
+  double      B[HOMmax+HOMmax+1], Aper[4][3];
   bool        BA[HOMmax+HOMmax+1];
   int         n_harm, harm[n_harm_max];
   double      kxV[n_harm_max], BoBrhoV[n_harm_max];
@@ -1824,6 +1824,31 @@ static void GetHOM(struct LOC_Lat_DealElement *LINK)
   GetSym__(LINK);
 }
 
+/* Get asymmetric aperture from lattice file */
+static void GetAPER(struct LOC_Lat_DealElement *LINK)
+{
+  long i = 0L;
+  double  lim_;
+  double  pos_, neg_;
+  symset  SET;
+
+  getest__(P_expset(SET, 1 << ((long)lparent)), "<(> expected", LINK);
+  do {
+    lim_ = EVAL_(LINK);
+    test__(P_expset(SET, 1 << ((long)comma)), "<, > expected", LINK);
+    neg_ = EVAL_(LINK);
+    test__(P_expset(SET, 1 << ((long)comma)), "<, > expected", LINK);
+    pos_ = EVAL_(LINK);
+    LINK->Aper[i][0] = lim_;
+    LINK->Aper[i][1] = neg_;
+    LINK->Aper[i][2] = pos_;
+    test__(P_expset(SET, (1 << ((long)comma)) | (1 << ((long)rparent))),
+	   "<, > or <)> expected", LINK);
+	i++;
+  } while (*LINK->sym != rparent);
+  GetSym__(LINK);
+}
+
 
 static void ClearHOMandDBN(struct LOC_Lat_DealElement *LINK)
 {
@@ -1851,6 +1876,20 @@ static void AssignHOM(long elem, struct LOC_Lat_DealElement *LINK)
   }
 }
 
+static void AssignAPER(long elem, struct LOC_Lat_DealElement *LINK)
+{
+  long       i;
+  ApertureType  *A;
+
+  A = ElemFam[elem-1].ElemF.A;
+  for (i = 0; i <= 3; i++) {
+    A->Aper[i][0] = LINK->Aper[i][0]; 
+    A->Aper[i][1] = LINK->Aper[i][1]; 
+    A->Aper[i][2] = LINK->Aper[i][2]; 
+    if (!trace) printf("Aper[%ld] = %lf\n", i, A->Aper[i][0]);   
+  }
+}
+
 /*********************
  get the high order field
 **********************/
@@ -2023,6 +2062,10 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_,
   double         dt, Frf, Vrf;
   long k1, k2, harnum, FF1, FF2;
   double FFscaling;
+  // LSN CLEAN
+  // double         zpm = 0.0, zpp = 0.0, zmp = 0.0, zmm = 0.0;
+  // double         xpm = 0.0, xpp = 0.0, xmp = 0.0, xmm = 0.0;
+  // double         zplim = 0.0, zmlim = 0.0, xplim = 0.0, zmlim = 0.0;
   Lat_symbol     sym1;
   symset         mysys, SET;
   long           SET1[(long)lsym / 32 + 2];
@@ -2035,8 +2078,9 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_,
   long           SET4[(long)dbnsym / 32 + 2];
   WigglerType    *WITH4;
   FieldMapType   *WITH6;
-  InsertionType  *WITH5;   /* ID Laurent */
+  InsertionType  *WITH5;   /* ID LSN */
   SolenoidType   *WITH7;
+  ApertureType   *WITH8;   /* Asymmetric aperture LSN */
   char str1[100] = "";
   char str2[100] = "";
   bool firstflag  = false; // flag for first kick input
@@ -2219,14 +2263,14 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_,
       WITH2->Pmethod = k2;
       WITH2->PN = k1;
       if (WITH1->PL != 0.0)
-	WITH2->Pirho = t * M_PI / 180.0 / WITH1->PL;
+	     WITH2->Pirho = t * M_PI / 180.0 / WITH1->PL;
       else
-	WITH2->Pirho = t * M_PI / 180.0;
-      WITH2->PTx1 = t1; WITH2->PTx2 = t2; WITH2->Pgap = gap;
-      WITH2->n_design = Dip;
-      AssignHOM(globval.Elem_nFam, &V);
-      SetDBN(&V);
-      WITH2->PBpar[HOMmax+2] = QK; WITH2->PdTpar = dt;
+	    WITH2->Pirho = t * M_PI / 180.0;
+        WITH2->PTx1 = t1; WITH2->PTx2 = t2; WITH2->Pgap = gap;
+        WITH2->n_design = Dip;
+        AssignHOM(globval.Elem_nFam, &V);
+        SetDBN(&V);
+        WITH2->PBpar[HOMmax+2] = QK; WITH2->PdTpar = dt;
     } else {
       printf("Elem_nFamMax exceeded: %ld(%ld)\n",
 	     globval.Elem_nFam, (long)Elem_nFamMax);
@@ -2761,7 +2805,69 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_,
     break;
 
 
-    /**************************************************************************
+/**************************************************************************
+      Asymmetric Aperture
+    ***************************************************************************
+
+    <name>: Aperture;
+
+    <name>:== Alphanumeric string. Up to NameLength character length.
+              BEGIN with an alphabet.
+
+        Vertical limitation z=f(x)
+        Horizontal limitation x=f(x)
+
+        z(>0) = zplim(>0) if x in [xpm zpm]
+        else         
+        z(>0) = default value   
+        
+        z(<0) = zmlim(>0) if x in [xmm zmm]
+        else         
+        z(<0) = default value   
+
+
+        x(>0) = xplim(>0) if z in [zpm zpp]
+        else         
+        x(>0) = default value   
+
+        x(<0) = xmlim(<0) if z in [zmm zmp]
+        else         
+        x(<0) = default value   
+
+
+    Example
+
+      ABS: aperture, aper=(+0.01, -0.01,  0.01,  zplim, xpm, xpp
+                            -0.02, -0.01, -0.01,  zmlim, xmm, xmp
+                            +0.02, -0.01, -0.01,  xplim, zpm, zpp
+                            -0.02, -0.01, -0.01); xmlim, zmm, zmp
+
+
+    **************************************************************************/
+
+  case aprsym:
+    getest__(P_expset(SET, 1 << ((long)comma)), "<comma> expected", &V);
+    getest__(P_addset(P_expset(SET1, 0), (long)apersym), "<aper> expected", &V);
+    getest__(P_expset(SET, 1 << ((long)eql)), "<=> expected", &V);
+    GetAPER(&V); /* read aperture */
+    test__(P_expset(SET, 1 << ((long)semicolon)), "<;> expected", &V);
+    GetSym__(&V);
+    globval.Elem_nFam++;
+    if (globval.Elem_nFam <= Elem_nFamMax) {
+      WITH = &ElemFam[globval.Elem_nFam-1];
+      WITH1 = &WITH->ElemF;
+      memcpy(WITH1->PName, ElementName, sizeof(partsName));
+      WITH1->PL = *V.rnum;
+      WITH1->Pkind = PartsKind(Aperture);
+      Aperture_Alloc(&WITH->ElemF);
+      AssignAPER(globval.Elem_nFam, &V);      
+    } else {
+      printf("Elem_nFamMax exceeded: %ld(%ld)\n",
+	     globval.Elem_nFam, (long)Elem_nFamMax);
+      exit_(1);
+    }
+    break;
+/**************************************************************************
       Marker
     ***************************************************************************
 
@@ -2883,11 +2989,11 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_,
     GetSym__(&V);
     QL = 0.0;   /* L */
     QK = 0.0;   /* K */
-    k1 = 0;   /* N */
-    t = 0.0;   /* T */
+    k1 = 0;     /* N */
+    t = 0.0;    /* T */
     t1 = 0.0;   /* T1 */
     t2 = 0.0;   /* T2 */
-    gap = 0.0;   /* gap */
+    gap = 0.0;  /* gap */
     k2 = Meth_Linear;   /* method */
     dt = 0.0;
     ClearHOMandDBN(&V);
@@ -3636,6 +3742,8 @@ static void init_reserved_words(struct LOC_Lattice_Read *LINK)
   MUST follow alphabetical list !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   --------------------------------------------------------------*/
   Reg("and            ", andsym, &V);
+  Reg("aper           ", apersym, &V); /* asymetric aperture : definition */
+  Reg("aperture       ", aprsym, &V);  /* asymmetric aperture symbol*/
   Reg("beam           ", bemsym, &V);
   Reg("bending        ", bndsym, &V);
   Reg("cavity         ", cavsym, &V);
@@ -3745,13 +3853,13 @@ static void init_reserved_words(struct LOC_Lattice_Read *LINK)
   P_addset(LINK->elmbegsys, (long)mpsym);
   P_addset(LINK->elmbegsys, (long)cavsym);
   P_addset(LINK->elmbegsys, (long)idsym);      /* ID Laurent */
+  P_addset(LINK->elmbegsys, (long)aprsym);     /* Asymmetric Aperture Laurent */
   P_addset(LINK->elmbegsys, (long)fmsym);
   P_addset(LINK->elmbegsys, (long)sprsym);
   P_addset(LINK->elmbegsys, (long)recsym);
   P_addset(LINK->elmbegsys, (long)solsym);
   P_addset(LINK->elmbegsys, (long)fnamesym1);  /* ID file name Laurent */
   P_addset(LINK->elmbegsys, (long)fnamesym2);  /* ID file name Laurent */
-//  P_addset(LINK->elmbegsys, (long)scalingsym); /* ID scale factor Laurent */
 }
 
 /* Local variables for DealWithDefns: */
diff --git a/tracy/tracy/src/tracy.cc b/tracy/tracy/src/tracy.cc
index 2ca24168c21039f37aebd2fba1468b4de9bc5fad..230a31760938ff2f90d4901d6ba5d2d81bf95e23 100644
--- a/tracy/tracy/src/tracy.cc
+++ b/tracy/tracy/src/tracy.cc
@@ -129,6 +129,10 @@ template void Marker_Pass(CellType &, ss_vect<double> &);
 
 template void Marker_Pass(CellType &, ss_vect<tps> &);
 
+template void Aperture_Pass(CellType &, ss_vect<double> &);
+
+template void Aperture_Pass(CellType &, ss_vect<tps> &);
+
 template void Cav_Pass(CellType &, ss_vect<double> &);
 
 template void Cav_Pass(CellType &, ss_vect<tps> &);