diff --git a/downloadversionIRdata.py b/downloadversionIRdata.py
index fb6e54cf260dc6a9954eafdb79089ee017bb34be..663e70ccfc623aa7f377044bc058b97894028edf 100644
--- a/downloadversionIRdata.py
+++ b/downloadversionIRdata.py
@@ -3,7 +3,7 @@
 Created on Wed Oct 25 15:51:46 2017
 updated on Tue Aug 21 10:20:00 2018
 
-Version: 2.5.3
+Version: 2.6.0
 (Numbering: #of big changes(OP1.2a download V1, OP1.2b download V2) . #of updates to add functionalities . #number of updates for bug fixes )
 @author: holn
 """
@@ -11,10 +11,10 @@ Version: 2.5.3
 import numpy as np
 import IR_image_tools as IR_tools
 from IR_config_constants import archivepath,portcamdict,camlimdict,valid_FOV_circle,valid_background_rectangle,TC_port,TC_channel,IRCamColdframes_fittingpath,exJet,exJet_trans
-try:
-    import W7Xrest.read_restdb as AKF_1
-except:
-    import read_restdb as AKF_1
+#try:
+#    import W7Xrest.read_restdb as AKF_1
+#except:
+#    import read_restdb as AKF_1
 import datetime
 import urllib
 import json
@@ -214,7 +214,7 @@ def read_LUT_from_file(port, this_time, t_exp, emissivity, cfilter, emissivity_s
         return False, []
     
 def download_NUC_by_program(port,program,exposure,version=0):
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
 #    try:
 #        t_program = AKF_2.get_program_from_to(program)
 #        prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -251,7 +251,7 @@ def download_NUC_by_times(port,starttime,stoptime,exposure,version=0):
                 offset_i=NUCpar['structure']['offset_index']                
             n+=1 
         if nuctimes[0]!=0:
-            NUC=AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(nuctimes[0]-10)+"&upto="+str(nuctimes[1]+10))
+            NUC=read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(nuctimes[0]-10)+"&upto="+str(nuctimes[1]+10))
             if NUC[0]:
                 images=np.vsplit(NUC[2],np.shape(NUC[2])[0]/offset_i)                    
                 return True,images,['gain','offset','cold','badpixels','gain_error','offset_error']
@@ -265,7 +265,7 @@ def download_NUC_by_times(port,starttime,stoptime,exposure,version=0):
         return False,0,0
 
 def get_NUC_by_program(port,program,exposure,version=0,verbose=0):
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
 #    try:
 #        t_program = AKF_2.get_program_from_to(program)
 #        prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -435,11 +435,11 @@ def download_hot_cold_reference_by_times(port,exposure,starttime=150390720000000
             print("hot image for requested exposure time not found")
         images=[]
         if HOTtime!=0:
-            HOT=AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(HOTtime-10)+"&upto="+str(HOTtime+10))
+            HOT=read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(HOTtime-10)+"&upto="+str(HOTtime+10))
             if HOT[0]:
                 images.append(HOT[2])
         if COLDtime!=0:
-            COLD=AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(COLDtime-10)+"&upto="+str(COLDtime+10))
+            COLD=read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(COLDtime-10)+"&upto="+str(COLDtime+10))
             if COLD[0]:
                 images.append(COLD[2])
                 
@@ -455,7 +455,7 @@ def download_background_by_program(port,program,exposure,version=0):
     '''
     returned exist,time,frame
     '''
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
 #    try:
 #        t_program = AKF_2.get_program_from_to(program)
 #        prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -499,7 +499,7 @@ def download_background_by_times(port,starttime,stoptime,exposure,camera_filter=
                     backtimes=[signal_list['dimensions'][2*n],signal_list['dimensions'][2*n+1]]                             
             n+=1
         if backtimes[0]!=0:
-            backdat=AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(backtimes[0]-10)+"&upto="+str(backtimes[1]+10))
+            backdat=read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(backtimes[0]-10)+"&upto="+str(backtimes[1]+10))
             if backdat[0]:                                    
                 return backdat#[True,backdat[2]]
             else:
@@ -617,7 +617,7 @@ def download_raw_images_by_times(port,starttime,stoptime,version=0,intervalSize=
 
 if fastDL:
     def download_raw_images_by_program_via_png(port,program,time_s=0,version=0,threads=1, verbose=0):
-        prog=AKF_1.get_program_from_PID(program)
+        prog=get_program_from_PID(program)
 #        try:
 #            t_program = AKF_2.get_program_from_to(program)
 #            prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -848,7 +848,7 @@ def download_raw_parlog_by_times(port,starttime,stoptime,version=0):
     
 
 def get_INFRATEC_filter_by_program(program,version=0):
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
 #    try:
 #        t_program = AKF_2.get_program_from_to(program)
 #        prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -884,7 +884,7 @@ def get_INFRATEC_filter_by_times(starttime,stoptime,port=50,version=0):
         return False, 0,-1
     
 def get_exposure_by_program(port,program,version=0):
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
 #    try:
 #        t_program = AKF_2.get_program_from_to(program)
 #        prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -909,7 +909,7 @@ def get_exposure_by_times(port,starttime,stoptime,version=0):
         stream="QRT_IRCAM/"+"AEF"+str(port)+"_meta_"
     if version==0:
         version=get_latest_version(stream+"DATASTREAM")
-    return AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/3/exposuretime"+"/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
+    return read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/3/exposuretime"+"/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
       
 def get_camera_temp_by_program(port,program,version=0):
 #    prog=AKF_1.get_program_from_PID(program)
@@ -936,14 +936,14 @@ def get_camera_temp_by_times(port,starttime,stoptime,version=0):
         raise Exception
     if version==0:
         version=get_latest_version(stream+"DATASTREAM")
-    dummy=AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/1/cameratemperature/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
+    dummy=read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/1/cameratemperature/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
     if dummy[0]:
         return dummy
     else:
-        return AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/1/cameratempetarure/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
+        return read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/1/cameratempetarure/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
     
 def get_sensor_temp_by_program(port,program,version=0):
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
 #    try:
 #        t_program = AKF_2.get_program_from_to(program)
 #        prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -964,10 +964,10 @@ def get_sensor_temp_by_times(port,starttime,stoptime,version=0):
         larchivepath=archivepath+"QRT_IRCAM/"+"AEF"+str(port)+"_meta_"
     if version==0:
         version=get_latest_version(stream+"DATASTREAM")
-    return AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/0/sensortemperature/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
+    return read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/0/sensortemperature/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
 
 def get_camera_framerate_by_program(port,program,version=0):
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
 #    try:
 #        t_program = AKF_2.get_program_from_to(program)
 #        prog =AKF_2.get_program_list(t_program[0], t_program[1])
@@ -989,7 +989,7 @@ def get_camera_framerate_by_times(port,starttime,stoptime,version=0):
         larchivepath=archivepath+"QRT_IRCAM/"+"AEF"+str(port)+"_meta_"
     if version==0:
         version=get_latest_version(stream+"DATASTREAM")    
-    return AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/2/framerate/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
+    return read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/2/framerate/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
     
 
 def get_frametype_by_program(port,program,version=0):
@@ -1010,7 +1010,7 @@ def get_frametype_by_times(port,starttime,stoptime,version=0):
     larchivepath=archivepath+"QRT_IRCAM/"+"AEF"+str(port)+"_meta_"
     if version==0:
         version=get_latest_version(stream+"DATASTREAM")    
-    return AKF_1.read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/5/frametype/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
+    return read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/5/frametype/_signal.json?from="+str(starttime)+"&upto="+str(stoptime))
     
 
 def get_average_divertor_TC_for_camtemp(port,starttime,endtime,part="all",TC=0):
@@ -1072,7 +1072,7 @@ def get_average_divertor_TC_for_camtemp(port,starttime,endtime,part="all",TC=0):
                 i+=1
             url=urlstart+str(offset+i)+ext+"0"+str(i)+"_TC"+str(i%8+1)
             try:
-                result=AKF_1.read_restdb(url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
+                result=read_restdb(url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
     #                res.append(result)
                 if result[0]:
                     n+=1            
@@ -1131,7 +1131,7 @@ def get_TC_data_for_port(port,starttime,endtime,part=0,version=0):
                 for chi in range(len(thisTCchannel[0])):            
                     url=urlstart+str(thisTCchannel[0][chi])+"/"+thisTCchannel[1][chi]
                     try:
-                        result=AKF_1.read_restdb(url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
+                        result=read_restdb(url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
                         if result[0]:
                             n+=1            
                             time=result[1]
@@ -1146,7 +1146,7 @@ def get_TC_data_for_port(port,starttime,endtime,part=0,version=0):
                 try:
                     url=urlstart+str(thisTCchannel[0][part-1])+"/"+thisTCchannel[1][part-1]
                     try:
-                        result=AKF_1.read_restdb(url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
+                        result=read_restdb(url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
                         if result[0]:
                             n+=1            
                             time=result[1]
@@ -1338,7 +1338,7 @@ def get_temp_from_raw_by_program(portnr,program,time_s=0,emi=0.8,T_version=2,ver
             #        i=len(frames)
                 date=int(program.split(".")[0])
                 if date>20180712 and date<20180720:
-                    prog=AKF_1.get_program_from_PID(program)
+                    prog=get_program_from_PID(program)
                     if prog[0]:
             #            t0time=prog[1]['trigger']['0'][0]
                         starttime=prog[1]['trigger']['1'][0]
@@ -1355,9 +1355,9 @@ def get_temp_from_raw_by_program_fullthreads(portnr,program,time_s=0,emi=0.8,T_v
     if threads==1 or not fastDL:
         return get_temp_from_raw_by_program(portnr,program,time_s,emi,T_version,version,threads,give_ERROR)
     else:
-        background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program,emi,T_version,version)
+        exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program,emi,T_version,version)
         FOV=get_FOV_mask(portnr)        
-        prog=AKF_1.get_program_from_PID(program)
+        prog=get_program_from_PID(program)
         if prog[0]:
             starttime=prog[1]['trigger']['1'][0]
             stoptime=prog[1]['trigger']['6'][0]
@@ -1487,7 +1487,7 @@ def get_nuced_raw_by_program_fullthreads(portnr,program,time_s=0,emi=0.8,T_versi
     else:
         background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program,emi,T_version,version)
         FOV=get_FOV_mask(portnr)        
-        prog=AKF_1.get_program_from_PID(program)
+        prog=get_program_from_PID(program)
         if prog[0]:
             starttime=prog[1]['trigger']['1'][0]
             stoptime=prog[1]['trigger']['6'][0]
@@ -1656,7 +1656,7 @@ def get_cooling_water_temperature_by_time(time_ns):
     inlet_url="94/Ist%20Av06_ABK10_CT003"
     url_base="http://archive-webapi.ipp-hgw.mpg.de/ArchiveDB/raw/W7X/CoDaStationDesc.85/DataModuleDesc.188_DATASTREAM/"
     try:
-        result_in=AKF_1.read_restdb(url_base+inlet_url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
+        result_in=read_restdb(url_base+inlet_url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
         if result_in[0]:           
             inlet=np.mean(np.array(result_in[2]))
         else:
@@ -1667,7 +1667,7 @@ def get_cooling_water_temperature_by_time(time_ns):
         inlet=0
         result_in=[False,0,0]
     try:
-        result_out=AKF_1.read_restdb(url_base+outlet_url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
+        result_out=read_restdb(url_base+outlet_url+"/_signal.json?from="+str(starttime)+"&upto="+str(endtime))
         if result_out[0]:           
             outlet=np.mean(np.array(result_out[2]))
         else:
@@ -1684,7 +1684,7 @@ def get_calib_data(port,program,emissivity=0.8,Temp_V=2,version=0,back_emissivit
     get_calib_data
     return exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error
     """
-    prog=AKF_1.get_program_from_PID(program)
+    prog=get_program_from_PID(program)
     OP=IR_tools.get_OP_by_time(program_str=program)
     exist=True
 #    try:
@@ -1973,6 +1973,111 @@ def estimate_offset(port,program,plot_it=False):
     else:
         return -1
 
+#%% general download functions
+"""
+the following functions are copied from W7xrest.read_restdb to remove this dependency
+@author: thomsen
+"""
+
+def read_restdb(request_url):
+    """
+    Reads JSON data from W7-X REST API
+    Returns: 
+        valid: access ok
+        t: numpy-array of time
+        signal: numpy-array of requested signals
+
+        To get NaN, Infinity as their counter parts in Python (not 'Null') 
+        add the string +'&allowNaN=true' in the request.
+    """
+    try:
+        res = urllib.request.urlopen(request_url)
+        signal_list = json.loads(res.read().decode('utf-8'))
+        res.close()
+    except urllib.error.URLError as e:
+        #if hasattr(e, 'reason'):
+            #print('Failed to reach server:',request_url)
+            #print('Reason: ', e.reason)
+        #elif hasattr(e, 'code'):
+            #print('The server couldn\'t fulfill the request.')
+            #print('Error code: ', e.code)
+        return False, [0], [-1]
+    else:
+#        res = urllib.request.urlopen(request_url)
+#        signal_raw=res.read()
+#        signal_string=signal_raw.decode(encoding='UTF-8')
+#        signal_list = json.loads(signal_string)
+
+        try:
+            signal0=np.array(signal_list['values'])
+            t=np.array(signal_list['dimensions'])
+        except ValueError as e:
+            print(signal_list['status'],e)
+            return False, [0], [-2]
+        else:
+            return True, np.squeeze(t), np.squeeze(np.double(signal0))
+
+def get_program_from_PID(instring):
+    """
+    Retrieve program information via json-request 
+    (Python version of A.Alonso's Matlab routine getProgramInfo.m)
+    instring: specifies day and program ID (format yyyymmdd.pid)
+    Returns 
+        valid: retrival ok
+        program_list: for program ID req_PID 
+                      (returns whole list, if req_PID was not found)
+    
+    Example:
+        from W7Xrest import read_restdb as read_restdb
+        v,pl=read_restdb.get_program_from_PID('20160310.007')
+        if v:
+            print(pl['description'])
+            trigger6=pl['trigger']['6'][0]
+    """
+
+    try:
+        string_date,req_PID=instring.split('.')
+    except ValueError as e:
+        print('!get_program_from_PID: Format of input string should be similar to 20160310.007')
+        return False,0
+    try:
+        day=datetime.datetime.strptime(string_date, "%Y%m%d")
+    except ValueError as e:
+        print('!get_program_from_PID: Date format should be similar to 20160310')
+        return False,0
+
+    day_plus1=day+datetime.timedelta(days=1)
+    #  create timestamps from begining to end of that day
+    w7xstamp0=np.int64(day.timestamp()*1e9)
+    w7xstamp1=np.int64(day_plus1.timestamp()*1e9)
+    # url to retrieve program information
+    program_url = 'http://archive-webapi.ipp-hgw.mpg.de/programs.json?from='
+    # write the url and load the data
+    jsonurl = program_url+np.str(w7xstamp0)+'&upto='+np.str(w7xstamp1)
+    
+    try:
+        res = urllib.request.urlopen(jsonurl)
+        prog_list = json.loads(res.read().decode('utf-8'))
+        res.close()
+    except urllib.error.URLError as e:
+        print('!get_program_from_PID: Error opening URL')
+        return False,0
+    else:
+        pl=prog_list['programs']
+        id_list=[]
+        for pr in pl:
+            x=pr['id']
+            id_list.append(int((x.split('.'))[1]))
+        try:
+            id=id_list.index(int(req_PID))
+        except ValueError as e:
+            print('!get_program_from_PID: Could not find requested program ID',e)
+            return False,pl
+        else:
+            return True, pl[id]
+
+
+#%%
     
 if __name__=='__main__':
     print("local function calling")