diff --git a/algos/template/algoobj_template.m b/algos/template/algoobj_template.m
index 5094e17e6391add923e900e19b39e1a8f9c67160..21cb5f246912c4c120a377f96197671573eeb78e 100644
--- a/algos/template/algoobj_template.m
+++ b/algos/template/algoobj_template.m
@@ -13,15 +13,15 @@ obj=obj.addfpinitfcn('algo_template_loadfp','algo_template_fp');
 obj=obj.addtunparamstruct('algo_template_tp', @()algo_template_loadtp(), false);
 
 %% Tunable parameters
-parshot=-1;
+parshot=2;
 mdsserver='scd.epfl.ch';
 mdstree  ='scdds';
-obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.kb1','enable'          ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot)); 
-obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.ks1','gain'            ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot)); 
-obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.ks2','refmodel.gain'   ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
-obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.kv1','rowvect'         ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
-obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.kv2','colvect'         ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
-obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.km1','matrix'          ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
+obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.enable'        ,'enable'          ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot)); 
+obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.gain'          ,'gain'            ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot)); 
+obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.refmodel.gain' ,'refmodel.gain'   ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
+obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.rowvect'       ,'rowvect'         ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
+obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.colvect'       ,'colvect'         ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
+obj=obj.addparameter(SCDclass_mdsparnumeric('template.params.matrix'        ,'matrix'          ,'srcsrv',mdsserver,'srctree',mdstree,'shot',parshot));
 
 %% 2nd tunable parameters structure/parameters
 % obj=obj.addtunparamstruct('algo_template_tp2', @()algo_template_loadtp(), false);
diff --git a/classes/SCDclass_algo.m b/classes/SCDclass_algo.m
index ed5c226eba0effd260ff15dbd2650c5c6cced988..fc753f7a79774777955f7cf3dce945500a4b22b0 100644
--- a/classes/SCDclass_algo.m
+++ b/classes/SCDclass_algo.m
@@ -805,6 +805,24 @@ classdef SCDclass_algo
        function load(obj)
          load_system(obj.modelname);
        end
+       
+       function updatemds(obj, shot)
+            %if shot~=-1
+            %    error('SCDclass_expcode:updatemds','update permitted only on the model shot');
+            %end
+            
+%             % first update algorithm tunparams default locally
+%             for ii=1:numel(obj.algonamelist)
+%                if strcmp(algo, obj.algonamelist{ii})
+%                    obj.algos{ii}.updatetemplatetp();
+%                end
+%             end
+%             % then update mds
+            obj.mdscontainer.modeltogenerate=obj.modelname;
+            obj.mdscontainer.autopopulateMDSparams(shot);         
+            obj.mdscontainer.autopopulateMDSwavegens(shot);
+        end
+       
     end
     
     methods(Static,Hidden=true)
diff --git a/classes/SCDclass_mdspar.m b/classes/SCDclass_mdspar.m
index e6c43aba67d9a852229e0003ea21159d461fa5a9..722fdbe35f72894bd83f5de72b5b817db1fbd900 100644
--- a/classes/SCDclass_mdspar.m
+++ b/classes/SCDclass_mdspar.m
@@ -357,22 +357,27 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
             retval=mdsput(node, writeval, 'x');
             if isnumeric(retval)
                 if ~rem(retval,2)
-                    warning('SCDclass_mdspar:MDSerror','Error writing node build_param.');
+                    warning('SCDclass_mdspar:MDSerror','Error writing node build_param. %s',mdsdata('GetMsg($1)',retval));
                 end
             else
-                warning('SCDclass_mdspar:MDSerror','Error writing node build_param.');
+                warning('SCDclass_mdspar:MDSerror','Error writing node build_param. %s',retval);
+                
             end
             
             retval=mdsput(nodecom, obj.mdshelpstr);
             if isnumeric(retval)
                 if ~rem(retval,2)
-                    warning('SCDclass_mdspar:MDSerror','Error writing node comment.');
+                    warning('SCDclass_mdspar:MDSerror','Error writing node comment. %s',mdsdata('GetMsg($1)',retval));
                 end
             else
-                warning('SCDclass_mdspar:MDSerror','Error writing node comment.');
+                warning('SCDclass_mdspar:MDSerror','Error writing node comment. %s',retval);
             end
             
             writeval=obj.casttomds(val);
+            
+            % logical type conversion
+            if islogical(writeval), writeval=uint8(writeval); end
+           
             mdsput(nodeval, writeval);
             checkval=mdsvalueraw(nodeval);
             if ~any(writeval==checkval)