diff --git a/code/classes/SCDclass_mdswgsigarray1.m b/code/classes/SCDclass_mdswgsigarray1.m
index e91c740057f54b427c25e84a414ee67a0167564e..54096a6b7003d1481635ad83996baccd2cf08c7b 100644
--- a/code/classes/SCDclass_mdswgsigarray1.m
+++ b/code/classes/SCDclass_mdswgsigarray1.m
@@ -36,7 +36,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
             obj.srcstopidx=srcinterval(end);
             obj.deststartidx=dstinterval(1);
             obj.deststopidx=dstinterval(end);
-
+            
             obj.classname=mfilename;        
             obj.marteclassname='MDSWgSigArray1';
         end
@@ -117,7 +117,13 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
             
                 dbdata=mdsvalue(mdschannel);
                 dbtime=mdsvalue(['dim_of(' mdschannel ')']);
+                
                 value.Data(:,ii) = single(interp1(dbtime,dbdata,timebase,'linear',0))';
+                firstindexes=find(timebase<dbtime(1));
+                lastindexes=find(timebase>dbtime(end));
+                value.Data(firstindexes,ii)=single(dbdata(1));
+                value.Data(lastindexes,ii)=single(dbdata(end));
+                
             end    
                 
         end
@@ -137,7 +143,10 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
             end
         end       
         
-        function entrystring = genMARTe2entry(obj, shot)
+        function entrystring = genMARTe2entry(obj, shot)            
+            if(srcstartidx~=deststartidx || srcstopidx~=deststopidx)
+                error('SCDclass_mdswgsigarray1:genMARTe2entry','Signal position remapping not yet implemented in the MARTe version of this class');
+            end
             entrystring=obj.genMARTe2entrycommon(shot);
             entrystring=[entrystring ' StartIdx=' num2str(obj.srcstartidx) ' StopIdx=' num2str(obj.srcstopidx) ' }'];
         end
@@ -158,7 +167,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
             for ii=obj.srcstartidx:obj.srcstopidx
                expandedtdi = sprintf(obj.tdiexpr, ii);
                martename=expandedtdi;
-               sigentry=sprintf(' %s={ NodeName=%s Type=float32 NumberOfElements=1 DataManagement=0 HoleManagement=1 }\n',martename, expandedtdi); 
+               sigentry=sprintf(' %s={ NodeName=%s Type=float32 NumberOfElements=%d DataManagement=0 HoleManagement=1 }\n',martename, expandedtdi); 
                expentries=[expentries sigentry]; 
             end                   
         end
diff --git a/code/classes/SCDclass_mdswgsigsingle.m b/code/classes/SCDclass_mdswgsigsingle.m
index d204baafdcfaa017612ebf86a9336606e8d8e47e..e4cbbe75c4a0c87d3c75ba01a9458653a8f96099 100644
--- a/code/classes/SCDclass_mdswgsigsingle.m
+++ b/code/classes/SCDclass_mdswgsigsingle.m
@@ -97,6 +97,12 @@ classdef SCDclass_mdswgsigsingle < SCDclass_mdswg
             dbdata=mdsvalue(obj.tdiexpr);
             dbtime=mdsvalue(['dim_of(' obj.tdiexpr ')']);
             value.Data = single(interp1(dbtime,dbdata,timebase,'linear',0))';
+            
+            firstindexes=find(timebase<dbtime(1));
+            lastindexes=find(timebase>dbtime(end));
+            value.Data(firstindexes)=single(dbdata(1));
+            value.Data(lastindexes)=single(dbdata(end));
+
         end
         
         
diff --git a/code/classes/SCDclass_task.m b/code/classes/SCDclass_task.m
index 28d77a20f3423d2bfd10b822da4ccd0df1648387..145d698665226195ae394070d582069aff107264 100644
--- a/code/classes/SCDclass_task.m
+++ b/code/classes/SCDclass_task.m
@@ -9,7 +9,7 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous
         datadictionary      % data dictionary hosting the parameter, if empty base workspace
         modelname           % name of the Simulink model using the parameter
         classname           % class name for logging
-
+        cparser             % constructor parameters parser
         
         % Properties for a MDS+ related task (not necessarly used)
         mdsserver           % MDS+ server for a MDS+ related task
@@ -32,32 +32,34 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous
         function obj=SCDclass_task(id,varargin)
             % MDS source and model destination constructor
             
-            p=inputParser;
-            addRequired(p,'id',@(x) ischar(x));
+            obj.cparser=inputParser;
+            addRequired(obj.cparser,'id',@(x) ischar(x));
 
-            addParameter(p,'srcsrv','tcvdata',@(x) ischar(x));
-            addParameter(p,'srctree','tcv_shot',@(x) ischar(x));
-            addParameter(p,'srctdimodel','',@(x) ischar(x));
-            addParameter(p,'srctdishot','',@(x) ischar(x));
-            addParameter(p,'modelname','',@(x) ischar(x));
-            addParameter(p,'datadictname','',@(x) ischar(x));  
-          
-            parse(p,id,varargin{:}{:});
+            addParameter(obj.cparser,'srcsrv','tcvdata',@(x) ischar(x));
+            addParameter(obj.cparser,'srctree','tcv_shot',@(x) ischar(x));
+            addParameter(obj.cparser,'srctdimodel','',@(x) ischar(x));
+            addParameter(obj.cparser,'srctdishot','',@(x) ischar(x));
+            addParameter(obj.cparser,'modelname','',@(x) ischar(x));
+            addParameter(obj.cparser,'datadictname','',@(x) ischar(x));  
+         
+            obj.verbose=1;
+        end
+        
+        function obj=parseconstructorcommon(obj, id, varargin)    
+            parse(obj.cparser,id,varargin{:}{:});
             
-            obj.id=p.Results.id;
-            obj.mdsserver=p.Results.srcsrv;
-            obj.mdstree=p.Results.srctree;
-            obj.tdiexprmodel=p.Results.srctdimodel;
-            if isempty(p.Results.srctdishot)
-                obj.tdiexprshot=p.Results.srctdimodel;
+            obj.id=obj.cparser.Results.id;
+            obj.mdsserver=obj.cparser.Results.srcsrv;
+            obj.mdstree=obj.cparser.Results.srctree;
+            obj.tdiexprmodel=obj.cparser.Results.srctdimodel;
+            if isempty(obj.cparser.Results.srctdishot)
+                obj.tdiexprshot=obj.cparser.Results.srctdimodel;
             else
-                obj.tdiexprshot=p.Results.srctdishot;
+                obj.tdiexprshot=obj.cparser.Results.srctdishot;
             end
-            obj.modelname=p.Results.modelname;
-            obj.datadictionary=p.Results.datadictname;
-
-            obj.verbose=1;
-        end
+            obj.modelname=obj.cparser.Results.modelname;
+            obj.datadictionary=obj.cparser.Results.datadictname;
+        end    
         
         function name=getmodelname(obj)
             name=obj.modelname;
diff --git a/code/classes/SCDclass_taskmdscheckbusnames.m b/code/classes/SCDclass_taskmdscheckbusnames.m
index 39cf89b1e1193aede08c8e1e2a1a2e8d62aa93c3..757b859db8fa42dc32bf96ad4e020b4cfe2c7c78 100644
--- a/code/classes/SCDclass_taskmdscheckbusnames.m
+++ b/code/classes/SCDclass_taskmdscheckbusnames.m
@@ -14,9 +14,11 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task
     
     methods
         
-        function obj=SCDclass_taskmdscheckbusnames(id, modelbus, varargin)   
+        function obj=SCDclass_taskmdscheckbusnames(id, varargin)   
             obj@SCDclass_task(id, varargin);
-            obj.modelbus=modelbus;
+            obj.cparser.addRequired('modelbus',@(x) ischar(x));
+            obj=obj.parseconstructorcommon(id, varargin);
+            obj.modelbus=obj.cparser.Results.modelbus;            
             obj.classname=mfilename;
         end
         
@@ -27,7 +29,7 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task
             [obj,value]=obj.getdata(shot);
             
             if obj.verbose==1
-                fprintf('Cheking bus: ''%s'' <-> ''%s'' (%s, shot %d)\n', obj.modelbus, obj.tdiexprused, obj.classname, shot);
+                fprintf('Checking bus: ''%s'' <-> ''%s'' (%s, shot %d)\n', obj.modelbus, obj.tdiexprused, obj.classname, shot);
             end
             
             d=Simulink.data.dictionary.open(sprintf('%s',obj.datadictionary));
diff --git a/code/classes/SCDclass_taskmdsloadprevADC.m b/code/classes/SCDclass_taskmdsloadprevADC.m
new file mode 100644
index 0000000000000000000000000000000000000000..93a0b17f6ecfca591931e108815d073fd6165347
--- /dev/null
+++ b/code/classes/SCDclass_taskmdsloadprevADC.m
@@ -0,0 +1,120 @@
+classdef SCDclass_taskmdsloadprevADC < SCDclass_task
+    % This is a special class which loads previous
+    % values of the ADCs for the acquiring nodes
+    properties
+        modelbus
+        node
+        workspacedatabasestructure
+    end
+    
+    methods
+        
+        function obj=SCDclass_taskmdsloadprevADC(id, varargin)   
+            obj@SCDclass_task(id, varargin);
+            obj.cparser.addRequired('modelbus',@(x) ischar(x));
+            obj.cparser.addParameter('node', 0, @(x) (isnumeric(x) && (x==2)));
+            obj=obj.parseconstructorcommon(id, varargin);
+            obj.modelbus=obj.cparser.Results.modelbus;
+            obj.node=obj.cparser.Results.node;
+            switch(obj.node)
+                case 2
+                    obj.workspacedatabasestructure='SCDsimdata.SCDnode02simdata.adc';
+                otherwise
+                    obj.workspacedatabasestructure='';
+            end    
+            obj.classname=mfilename;
+        end
+        
+        function init(obj, shot)
+            mdsconnect(obj.mdsserver);
+            mdsopen(obj.mdstree, shot);
+                  
+            switch(obj.node)
+                case 2
+                    obj.actualizeNode02(shot); 
+            end    
+        end
+            
+        function [obj, value] = getdata(obj,shot)
+            %obj=obj.actualizegetcmd('mdsvalue(''%s'')', shot);            
+            %value=eval(obj.getcommand);
+            
+            switch(obj.node)
+                case 2
+                    [~,value]=obj.getdataNode02ACQ196(shot); %% Here we need to switch betweeen old and new acquisition unit and tcv standard also
+            end                
+        end
+        
+        function printinfo(obj)
+            obj.printinfocommon;
+            fprintf('  Init model bus: %s, node: %d, ws base struct: %s\n',obj.modelbus, obj.node, obj.workspacedatabasestructure);
+        end
+        
+    end
+    
+    methods(Access = private)
+       
+        function obj = actualizeNode02(obj, shot)
+            dd=SCDconf_getdatadict(obj.datadictionary);
+            adcbus=dd.getEntry(obj.modelbus).getValue;
+            [~,data]=obj.getdata(shot);
+            T=timeseries; 
+            if obj.verbose==1
+               fprintf('Actualizing data for bus: ''%s'' (%s, shot %d) ', obj.modelbus, obj.classname, shot);
+            end
+            for ii=1:192
+                T.Time=data.Time;
+                T.Data=int16(data.Data(:,ii));
+                assignin('base','temp',T);
+                assigncmd=sprintf('%s.%s=temp;',obj.workspacedatabasestructure, adcbus.Elements(ii).Name);
+                evalin('base',assigncmd);
+                if obj.verbose==1
+                    fprintf('.');
+                end
+            end
+            evalin('base','clear temp');
+            if obj.verbose==1
+                fprintf('\n');
+            end   
+        end
+        
+        function [obj, value] = getdataNode02ACQ196(obj, shot)
+            T=timeseries;
+            timebase=mdsvalue('dim_of(\top.crpprt02.board1.adc_01)'); %% TODO: check with marte
+            d_time = double(mdsvalueraw( '\top.crpprt02.params:d_time' ))*1.0e-6;
+            %timebase = round(timebase.*1/d_time)*d_time-d_time/2;
+            timebase = round(timebase.*1/d_time)*d_time-d_time/100;
+            T.Time=timebase;
+            T.Data=zeros(numel(timebase),192);
+            if obj.verbose==1
+               fprintf('Getting data for bus: ''%s'' (%s, shot %d) ', obj.modelbus, obj.classname, shot);
+            end
+            for ii=1:96
+                % NOTE: physical2logical remapping is only for
+                % data acquired with the present ACQ196 system
+                % it must go away when using the new ACQ2106 system
+                %fprintf('Loading channel %d:%d ...\r',1,physical2logical(ii));
+
+                channelstr=sprintf('\\top.crpprt02.board1.adc_%02d.raw',physical2logical(ii));
+                T.Data(:,ii)=int16(mdsvalue(channelstr));   
+                if obj.verbose==1
+                    fprintf('.');
+                end
+            end
+            for ii=1:96
+                %fprintf('Loading channel %d:%d ...\r',2,physical2logical(ii));
+                channelstr=sprintf('\\top.crpprt02.board2.adc_%02d.raw',physical2logical(ii));
+                T.Data(:,ii+96)=int16(mdsvalue(channelstr));
+                if obj.verbose==1
+                    fprintf('.');
+                end
+            end
+            value=T;
+            if obj.verbose==1
+                fprintf('\n');
+            end  
+        end
+        
+    end
+end
+