diff --git a/cws_read__readdata.pro b/cws_read__readdata.pro
index 92538ac5ae17af5df9819f0b90a89ad74ff9c6b2..023d850ea8568da56a96b063b49bd6aa9cb3296a 100644
--- a/cws_read__readdata.pro
+++ b/cws_read__readdata.pro
@@ -75,6 +75,13 @@ FUNCTION cws_read::readData, version=version
       return, self.readdata_CLV()
   
   end  
+  
+    'LARN': begin
+  
+      return, self.readdata_LARN()
+  
+  end
+  
 		
   'MPF': BEGIN
 
@@ -856,249 +863,7 @@ FUNCTION cws_read::readData, version=version
   ;------------------------------------------------
 	
   'LAR': BEGIN
-
-    if keyword_set(uncertainty) then error_message_uncertainty, self.grp	
-
-    bin_flag = 0
-    self.infile = FILE_SEARCH(self->build_source_path()+'MSGP.' $
-                    + self->get_date(/string,/year,/day_of_year) $
-                    + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.BIN',c=c)
-  stop
-    IF c EQ 1 THEN BEGIN
-	
-      ; read binary file
-      bin_flag = 1 
-     
-      structure = { $
-                  lon:fltarr(3712,3712), $
-                  lat:fltarr(3712,3712), $
-                  refl2:fltarr(3712,3712), $
-                  bt039 :fltarr(3712,3712), $ 
-                  bt108 :fltarr(3712,3712), $
-                  cph:fltarr(3712,3712), $
-                  cod:fltarr(3712,3712), $
-                  refW:fltarr(3712,3712), $
-                  refI:fltarr(3712,3712), $
-                  lwp:fltarr(3712,3712), $
-                  iwp:fltarr(3712,3712), $
-                  ctt:fltarr(3712,3712), $
-                  ctp:fltarr(3712,3712), $
-                  ctpE:fltarr(3712,3712), $
-                  cth:fltarr(3712,3712), $
-                  cthE:fltarr(3712,3712), $
-                  cbh:fltarr(3712,3712) $
-                    }
-
-      dum = fltarr(3712,3712)    
-            
-      openr,lun,self.infile,/get_lun,/swap_endian
-            
-      FOR i=0,14 DO BEGIN
-        readu,lun,dum
-        structure.(i) = dum
-      ENDFOR
-           
-      free_lun,lun
-       
-    ENDIF ELSE BEGIN
-     
-      ; search netCDF files
-      self.infile = FILE_SEARCH(self->build_source_path()+'MET9.' $
-                      + self->get_date(/string,/year,/day_of_year) $
-                      + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.CDF',c=c)
-      IF c eq 0 THEN RETURN,-1
-     
-      ; read indicies
-      col = ulonarr(10281010)	
-      openr,lun,self->build_source_path()+'/../col_lut.dat',/get_lun,/swap_endian
-      readu,lun,col
-      free_lun,lun
-		 
-      row = ulonarr(10281010)
-      openr,lun,self->build_source_path()+'/../row_lut.dat',/get_lun,/swap_endian
-      readu,lun,row
-      free_lun,lun
-		 
-      bin_flag = 0
-	  
-    ENDELSE
-	
-    CASE self.product of
-	
-      'cmb': BEGIN
-		
-	    IF bin_flag eq 0 THEN BEGIN
-	      fileID = ncdf_open(self.inFile)
-	      cmbID = ncdf_varID(fileID,'cloud_phase')
-	      ncdf_varget,fileID,cmbID,cmb
-	      ncdf_close,fileID
-		  
-	      data = make_array([3712,3712],value=-99.)
-	      data[col,row]=cmb
-		ENDIF ELSE data = structure.cph
-		 
-	    img =  rotate((data ge 6) + 2.* ( between(data,-1,5))  ,7)
-	    undefine,data
-	    undefine,cmb	 	      		
-      
-	    RETURN,img					
-		
-	  END
-	
-	'cth' : BEGIN
-	 IF bin_flag eq 0 THEN BEGIN
-	   fileID = ncdf_open(self.inFile)
-	   cmbID = ncdf_varID(fileID,'cloud_top_height')
-	   ncdf_varget,fileID,cmbID,data
-	   ncdf_close,fileID
-		  
-	   img = make_array([3712,3712],value=-99.)
-	   img[col,row] = data
-	  endIF ELSE img = structure.cth
-	  img = rotate(img,7)
-	  nodata_idx = where(img lt 0 ,nodata_anz)
-	  IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
-	  
-	  RETURN,img
-	
-	end
-	
-	
-	
-	'ctp' : BEGIN	
-		IF bin_flag eq 0 THEN BEGIN
-	    fileID = ncdf_open(self.inFile)
-	    cmbID = ncdf_varID(fileID,'cloud_top_pressure')
-	    ncdf_varget,fileID,cmbID,data
-	    ncdf_close,fileID
-		  
-	    img = make_array([3712,3712],value=-1.)
-	    img[col,row] = data
-	   endIF ELSE img = structure.ctp
-	  img = rotate(img,7)
-	  
-	  nodata_idx = where(img lt 0 ,nodata_anz)
-	  IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
-	  
-	  
-	  RETURN,img
-	end
-	  
-	  
-	  'ctt' : BEGIN	
-		IF bin_flag eq 0 THEN BEGIN
-	      fileID = ncdf_open(self.inFile)
-	      cmbID = ncdf_varID(fileID,'cloud_effective_temperature')
-	      ncdf_varget,fileID,cmbID,data
-	      ncdf_close,fileID
-		  
-	      img = make_array([3712,3712],value=-1.)
-	      img[col,row] = data
-	    ENDIF ELSE img = structure.ctt
-	    img = rotate(img,7)
-	  
-	    nodata_idx = where(img lt 0 ,nodata_anz)
-	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
-	  
-	  
-	    RETURN,img
-	  end  
-	
-	  'cod' : BEGIN
-	    IF bin_flag eq 0 THEN BEGIN
-	      fileID = ncdf_open(self.inFile)
-	      cmbID = ncdf_varID(fileID,'visible_optical_depth')
-	      ncdf_varget,fileID,cmbID,data
-	      ncdf_close,fileID
-		  
-	      img = make_array([3712,3712],value=-1.)
-	      img[col,row] = data
-	    ENDIF ELSE img = structure.cod
-	    img = rotate(img,7)
-	  
-	    nodata_idx = where(img lt 0 ,nodata_anz)
-	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
-	  
-	  
-	    RETURN,img
-	  END 
-	
-	  'ref' : BEGIN
-	
-	    IF bin_flag eq 0 THEN BEGIN
-	      fileID = ncdf_open(self.inFile)
-	      cmbID = ncdf_varID(fileID,'particle_size')
-	      ncdf_varget,fileID,cmbID,data
-	      ncdf_close,fileID
-		  
-	      img = make_array([3712,3712],value=-1.)
-	      img[col,row] = data
-	   
-	      img = rotate(img,7)
-	      self->set_product,'cph'
-	      cph = self->get_data()
-	      self->set_product,'ref'
-	      idx_ice = where(round(cph) eq 2,cIce)
-	  
-	      IF cIce gt 0 THEN img[idx_ice] /= 2.
-	    ENDIF ELSE BEGIN
-          wat = structure.refW
-          ice = (structure.refI)/2.
-          img = wat > ice
-        ENDELSE
-	    nodata_idx = where(img lt 0 ,nodata_anz)
-	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
-	 
-	    RETURN,img
-	  END 
-	
-	  'lwp' : BEGIN
-	    IF bin_flag eq 0 THEN BEGIN
-	      fileID = ncdf_open(self.inFile)
-	      cmbID = ncdf_varID(fileID,'liquid_water_path')
-	      ncdf_varget,fileID,cmbID,data
-	      ncdf_close,fileID
-		  
-	      img = make_array([3712,3712],value=-1.)
-	      img[col,row] = data
-	    ENDIF ELSE BEGIN
-	      lwp = structure.lwp
-	      iwp = structure.iwp
-	      img = lwp > iwp
-	    ENDELSE
-	    img = rotate(img,7)
-	  
-	    nodata_idx = where(img lt 0 ,nodata_anz)
-	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
-	  
-	  
-	    RETURN,img
-	  END
-	  
-	  'cph' : BEGIN
-	    IF bin_flag eq 0 THEN BEGIN
-	      fileID = ncdf_open(self.inFile)
-	      cmbID = ncdf_varID(fileID,'cloud_phase')
-	      ncdf_varget,fileID,cmbID,data
-	      ncdf_close,fileID
-	 		   
-	      img = make_array([3712,3712],value=-1.)
-	      img[col,row] = data
-	    ENDIF ELSE img = structure.cph
-	    cph = rotate(img,7)
-	 
-	    cmb = self->get_data(product='cmb')
-	    self->set_product,'cph'
-	
-	    data = 0.*(cmb eq 0) + 1.*( cph eq 1 or cph eq 2 or cph eq 3) $
-	                      + 2.*( cph eq 4 or (cph eq 5) ) $ 
-	 	                 
-	 	                  + 4.*( (cph eq 6 or cph eq 9) and (cmb eq 1)  ) 
-	    RETURN,data
-	 
-      END 
-      	  	  
-    ENDCASE	
+      return,self.readdata_LAR()
   END
 
   ;------------------------------------------------	
diff --git a/cws_read__readdata_LAR.pro b/cws_read__readdata_LAR.pro
new file mode 100644
index 0000000000000000000000000000000000000000..e98c4036bbf81409f60d31e99cc8f060163eebfe
--- /dev/null
+++ b/cws_read__readdata_LAR.pro
@@ -0,0 +1,250 @@
+;
+;   LAR or CREW
+;
+function cws_read::readdata_LAR
+
+
+    if keyword_set(uncertainty) then error_message_uncertainty, self.grp	
+
+    bin_flag = 0
+    self.infile = FILE_SEARCH(self->build_source_path()+'MSGP.' $
+                    + self->get_date(/string,/year,/day_of_year) $
+                    + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.BIN',c=c)
+  stop
+    IF c EQ 1 THEN BEGIN
+	
+      ; read binary file
+      bin_flag = 1 
+     
+      structure = { $
+                  lon:fltarr(3712,3712), $
+                  lat:fltarr(3712,3712), $
+                  refl2:fltarr(3712,3712), $
+                  bt039 :fltarr(3712,3712), $ 
+                  bt108 :fltarr(3712,3712), $
+                  cph:fltarr(3712,3712), $
+                  cod:fltarr(3712,3712), $
+                  refW:fltarr(3712,3712), $
+                  refI:fltarr(3712,3712), $
+                  lwp:fltarr(3712,3712), $
+                  iwp:fltarr(3712,3712), $
+                  ctt:fltarr(3712,3712), $
+                  ctp:fltarr(3712,3712), $
+                  ctpE:fltarr(3712,3712), $
+                  cth:fltarr(3712,3712), $
+                  cthE:fltarr(3712,3712), $
+                  cbh:fltarr(3712,3712) $
+                    }
+
+      dum = fltarr(3712,3712)    
+            
+      openr,lun,self.infile,/get_lun,/swap_endian
+            
+      FOR i=0,14 DO BEGIN
+        readu,lun,dum
+        structure.(i) = dum
+      ENDFOR
+           
+      free_lun,lun
+       
+    ENDIF ELSE BEGIN
+     
+      ; search netCDF files
+      self.infile = FILE_SEARCH(self->build_source_path()+'MET9.' $
+                      + self->get_date(/string,/year,/day_of_year) $
+                      + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.CDF',c=c)
+      IF c eq 0 THEN RETURN,-1
+     
+      ; read indicies
+      col = ulonarr(10281010)	
+      openr,lun,self->build_source_path()+'/../col_lut.dat',/get_lun,/swap_endian
+      readu,lun,col
+      free_lun,lun
+		 
+      row = ulonarr(10281010)
+      openr,lun,self->build_source_path()+'/../row_lut.dat',/get_lun,/swap_endian
+      readu,lun,row
+      free_lun,lun
+		 
+      bin_flag = 0
+	  
+    ENDELSE
+	
+    CASE self.product of
+	
+      'cmb': BEGIN
+		
+	    IF bin_flag eq 0 THEN BEGIN
+	      fileID = ncdf_open(self.inFile)
+	      cmbID = ncdf_varID(fileID,'cloud_phase')
+	      ncdf_varget,fileID,cmbID,cmb
+	      ncdf_close,fileID
+		  
+	      data = make_array([3712,3712],value=-99.)
+	      data[col,row]=cmb
+		ENDIF ELSE data = structure.cph
+		 
+	    img =  rotate((data ge 6) + 2.* ( between(data,-1,5))  ,7)
+	    undefine,data
+	    undefine,cmb	 	      		
+      
+	    RETURN,img					
+		
+	  END
+	
+	'cth' : BEGIN
+	 IF bin_flag eq 0 THEN BEGIN
+	   fileID = ncdf_open(self.inFile)
+	   cmbID = ncdf_varID(fileID,'cloud_top_height')
+	   ncdf_varget,fileID,cmbID,data
+	   ncdf_close,fileID
+		  
+	   img = make_array([3712,3712],value=-99.)
+	   img[col,row] = data
+	  endIF ELSE img = structure.cth
+	  img = rotate(img,7)
+	  nodata_idx = where(img lt 0 ,nodata_anz)
+	  IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
+	  
+	  RETURN,img
+	
+	end
+	
+	
+	
+	'ctp' : BEGIN	
+		IF bin_flag eq 0 THEN BEGIN
+	    fileID = ncdf_open(self.inFile)
+	    cmbID = ncdf_varID(fileID,'cloud_top_pressure')
+	    ncdf_varget,fileID,cmbID,data
+	    ncdf_close,fileID
+		  
+	    img = make_array([3712,3712],value=-1.)
+	    img[col,row] = data
+	   endIF ELSE img = structure.ctp
+	  img = rotate(img,7)
+	  
+	  nodata_idx = where(img lt 0 ,nodata_anz)
+	  IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
+	  
+	  
+	  RETURN,img
+	end
+	  
+	  
+	  'ctt' : BEGIN	
+		IF bin_flag eq 0 THEN BEGIN
+	      fileID = ncdf_open(self.inFile)
+	      cmbID = ncdf_varID(fileID,'cloud_effective_temperature')
+	      ncdf_varget,fileID,cmbID,data
+	      ncdf_close,fileID
+		  
+	      img = make_array([3712,3712],value=-1.)
+	      img[col,row] = data
+	    ENDIF ELSE img = structure.ctt
+	    img = rotate(img,7)
+	  
+	    nodata_idx = where(img lt 0 ,nodata_anz)
+	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
+	  
+	  
+	    RETURN,img
+	  end  
+	
+	  'cod' : BEGIN
+	    IF bin_flag eq 0 THEN BEGIN
+	      fileID = ncdf_open(self.inFile)
+	      cmbID = ncdf_varID(fileID,'visible_optical_depth')
+	      ncdf_varget,fileID,cmbID,data
+	      ncdf_close,fileID
+		  
+	      img = make_array([3712,3712],value=-1.)
+	      img[col,row] = data
+	    ENDIF ELSE img = structure.cod
+	    img = rotate(img,7)
+	  
+	    nodata_idx = where(img lt 0 ,nodata_anz)
+	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
+	  
+	  
+	    RETURN,img
+	  END 
+	
+	  'ref' : BEGIN
+	
+	    IF bin_flag eq 0 THEN BEGIN
+	      fileID = ncdf_open(self.inFile)
+	      cmbID = ncdf_varID(fileID,'particle_size')
+	      ncdf_varget,fileID,cmbID,data
+	      ncdf_close,fileID
+		  
+	      img = make_array([3712,3712],value=-1.)
+	      img[col,row] = data
+	   
+	      img = rotate(img,7)
+	      self->set_product,'cph'
+	      cph = self->get_data()
+	      self->set_product,'ref'
+	      idx_ice = where(round(cph) eq 2,cIce)
+	  
+	      IF cIce gt 0 THEN img[idx_ice] /= 2.
+	    ENDIF ELSE BEGIN
+          wat = structure.refW
+          ice = (structure.refI)/2.
+          img = wat > ice
+        ENDELSE
+	    nodata_idx = where(img lt 0 ,nodata_anz)
+	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
+	 
+	    RETURN,img
+	  END 
+	
+	  'lwp' : BEGIN
+	    IF bin_flag eq 0 THEN BEGIN
+	      fileID = ncdf_open(self.inFile)
+	      cmbID = ncdf_varID(fileID,'liquid_water_path')
+	      ncdf_varget,fileID,cmbID,data
+	      ncdf_close,fileID
+		  
+	      img = make_array([3712,3712],value=-1.)
+	      img[col,row] = data
+	    ENDIF ELSE BEGIN
+	      lwp = structure.lwp
+	      iwp = structure.iwp
+	      img = lwp > iwp
+	    ENDELSE
+	    img = rotate(img,7)
+	  
+	    nodata_idx = where(img lt 0 ,nodata_anz)
+	    IF nodata_anz gt 0 THEN img[nodata_idx]=-1.
+	  
+	  
+	    RETURN,img
+	  END
+	  
+	  'cph' : BEGIN
+	    IF bin_flag eq 0 THEN BEGIN
+	      fileID = ncdf_open(self.inFile)
+	      cmbID = ncdf_varID(fileID,'cloud_phase')
+	      ncdf_varget,fileID,cmbID,data
+	      ncdf_close,fileID
+	 		   
+	      img = make_array([3712,3712],value=-1.)
+	      img[col,row] = data
+	    ENDIF ELSE img = structure.cph
+	    cph = rotate(img,7)
+	 
+	    cmb = self->get_data(product='cmb')
+	    self->set_product,'cph'
+	
+	    data = 0.*(cmb eq 0) + 1.*( cph eq 1 or cph eq 2 or cph eq 3) $
+	                      + 2.*( cph eq 4 or (cph eq 5) ) $ 
+	 	                 
+	 	                  + 4.*( (cph eq 6 or cph eq 9) and (cmb eq 1)  ) 
+	    RETURN,data
+	 
+      END 
+      	  	  
+    ENDCASE	
+
+end
diff --git a/cws_read__readdata_LARN.pro b/cws_read__readdata_LARN.pro
new file mode 100644
index 0000000000000000000000000000000000000000..de9d3b56a8a1f1fed1d5c8f9ee11b8ef041e2c7e
--- /dev/null
+++ b/cws_read__readdata_LARN.pro
@@ -0,0 +1,109 @@
+;
+;  LAR for ICWG2
+
+function cws_read::readdata_LARN
+  self.infile = file_search(self.build_source_path()+'MT9V04.0.' $
+    + self.get_date(/string,/year,/day_of_year) $
+     +'.'+self->get_date(/string,/hour,/minute)+'.PX.03K.NC', c =c )
+  
+   IF c eq 0 THEN RETURN,-1
+  
+ 
+  case self.product of
+  'cmb': begin
+      ncdf_get,self.infile,'cloud_top_pressure',d
+      ncdf_get,self.infile,'latitude',ll
+      ctp = d['cloud_top_pressure','value']
+      lat = ll['latitude','value']
+      
+      cmb = (lat lt 200) + (ctp lt 2000)
+      cmb = rotate(cmb,7)
+      return,cmb
+      
+  end 
+  
+  'cph': begin
+      ncdf_get,self.infile,'cloud_phase',d
+      ncdf_get,self.infile,'latitude',ll
+      cph = d['cloud_phase','value']
+      lat = ll['latitude','value']
+      
+      ;cmb = (lat lt 200) + (ctp lt 2000)
+      cph = rotate(cph,7)
+      return,cph
+      
+  end 
+  
+  
+  'ctp': begin
+    ncdf_get,self.infile,'cloud_top_pressure',d
+    ctp = d['cloud_top_pressure','value']
+    idx = where (ctp gt 2000)
+    ctp[idx] = -999.
+    
+    ctp = rotate(ctp,7)
+    return,ctp
+    end
+  
+  
+   'ctt': begin
+    ncdf_get,self.infile,'cloud_top_temperature',d
+    ctt = d['cloud_top_temperature','value']
+    idx = where (ctt gt 2000)
+    ctt[idx] = -999.
+    
+    ctt = rotate(ctt,7)
+    return,ctt
+    end
+    
+    
+       'cth': begin
+    ncdf_get,self.infile,'cloud_top_height',d
+    cth = d['cloud_top_height','value']
+    idx = where (cth gt 2000)
+    cth[idx] = -999.
+    
+    cth = rotate(cth,7)
+    return,cth
+    end
+    
+    'cod': begin
+    ncdf_get,self.infile,'cloud_visible_optical_depth',d
+    cod = d['cloud_visible_optical_depth','value']
+    idx = where (cod gt 2000)
+    cod[idx] = -999.
+    
+    cod = rotate(cod,7)
+    return,cod
+    end
+    
+     'ref': begin
+    ncdf_get,self.infile,'cloud_particle_size',d
+    ref = d['cloud_particle_size','value']
+    idx = where (ref gt 2000)
+    ref[idx] = -999.
+    
+    ref = rotate(ref,7)
+    return,ref
+    end
+    
+    'lwp': begin
+    ncdf_get,self.infile,'cloud_lwp_iwp',d
+    cwp = d['cloud_lwp_iwp','value']
+    idx = where (cwp gt 2000)
+    cwp[idx] = -999.
+    
+    cwp = rotate(cwp,7)
+    return,cwp
+    
+    end
+    
+    
+   
+    
+  endcase
+
+
+
+
+end 
diff --git a/icwg2_transform.pro b/icwg2_transform.pro
index 924731befd5307ef4b01e757a8068c6fec449d40..6b528f9b9db8bcdb1053f9a2f4fe921f6f84e3c3 100644
--- a/icwg2_transform.pro
+++ b/icwg2_transform.pro
@@ -4,7 +4,7 @@ pro icwg2_transform, grp
 
 default,grp,'TPS'
 prd_list = ['cmb','ctp','ctt','cth','cod','ref','cph','lwp']
-prd_list=['cmb','ctp']
+;prd_list=['cmb','ctp']
 o=cws_read()
 o.set_group,grp