diff --git a/tracy/tracy/src/read_script.cc b/tracy/tracy/src/read_script.cc
index df01376dc386b1cb2f6bc33043d56c7fbc2f8dd1..4893c4464e32900828b1bf2a3c4fb6aa25ff0967 100644
--- a/tracy/tracy/src/read_script.cc
+++ b/tracy/tracy/src/read_script.cc
@@ -45,7 +45,11 @@ char fic_hcorr[max_str],fic_vcorr[max_str], fic_skew[max_str];
 /* COD correction */
 int nwh = 56, nwv = 56; //number of singular values for SVD correction
 
-//correction
+/* ID compensation */  
+char   IDCq_name[max_str][11];
+
+
+//multipole field error correction (SOLEIL based)
 char hcorr_file[max_str], vcorr_file[max_str]; //files with the status of hcorr/vcorr status, 
                                                   //to choose which correctors are used for orbit correction
 //default name of special elements in lattice
@@ -491,6 +495,22 @@ void read_script(const char *param_file_name, bool rd_lat, long& CommNo, UserCom
       else if (strcmp("nwv", name) == 0){
         sscanf(line, "%*s %d", &nwv);
       }
+      //ID correction
+      else if (strcmp("IDCorrFlag", name) == 0)
+        strcpy(UserCommandFlag[CommNo].CommandStr,name); 
+      else if (strcmp("N_calls", name) == 0) // ID correction parameters
+	sscanf(line, "%*s %d", &N_calls);
+      else if (strcmp("N_steps", name) == 0)
+	sscanf(line, "%*s %d", &N_steps);
+      else if (strcmp("N_Fam", name) == 0)
+	sscanf(line, "%*s %d", &N_Fam);
+      else if (strcmp("IDCquads", name) == 0) {
+	sscanf(line, "%*s %s %s %s %s %s %s %s %s %s %s %s",
+	       IDCq_name[0], IDCq_name[1], IDCq_name[2], IDCq_name[3],
+	       IDCq_name[4], IDCq_name[5], IDCq_name[6], IDCq_name[7],
+	       IDCq_name[8], IDCq_name[9], IDCq_name[10]);
+      }
+//      } else if (strcmp("scl_nu", name) == 0)
       else{
         printf("bad line in file %s, line %ld \n", full_param_file_name, LineNum);
         exit_(1);