diff --git a/code/classes/SCDclass_algo.m b/code/classes/SCDclass_algo.m
index 8a721580ffc6471b285dbd0fa839d80dac164a65..7e24487d008f236ddc0893358348d0c2a779d47f 100644
--- a/code/classes/SCDclass_algo.m
+++ b/code/classes/SCDclass_algo.m
@@ -474,19 +474,17 @@ classdef SCDclass_algo
         
         %% MDS container methods forwarders
         
-        function obj = addparameter(obj, param)
-          % bind parameter(s) to algoobj's name, dictionary and last
-          % exported tp
-          
+        function obj = addparameter(obj, params)
           % assume this parameter is bound to last exported tp on the list
           if ~isempty(obj.exportedtps), tpname = obj.exportedtps{end};
           else, tpname = '';
           end
           
-          for ii=1:numel(param)
-            param(ii) = param(ii).bind(obj.modelname, obj.datadictionary, tpname);
-          end
-          obj.mdscontainer=obj.mdscontainer.addparameter(param);
+          % bind parameter(s) to algoobj's name, dictionary and exportedtp
+          params = params.bind(obj.modelname, obj.datadictionary, tpname);
+          
+          % add params to mdscontainer
+          obj.mdscontainer=obj.mdscontainer.addparameter(params);
         end
         
         function obj = printparameters(obj)
@@ -498,8 +496,10 @@ classdef SCDclass_algo
         end
         
         function obj = addwavegen(obj, wavegen)
+            for ii=1:numel(wavegen)
+              wavegen(ii) = wavegen(ii).bind(obj.modelname,obj.datadictionary,obj.timing);
+            end
             obj.mdscontainer=obj.mdscontainer.addwavegen(wavegen);
-            obj.mdscontainer=obj.mdscontainer.bindlastwavegen(obj.modelname, obj.datadictionary, obj.timing);
         end
         
         function obj = printwavegens(obj)
diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m
index 55baaa028fb68ed2319ec59aeb778470dca7d09c..4a371a3aeb3d0a0744ca59b79273b6d1e93f81f7 100644
--- a/code/classes/SCDclass_expcode.m
+++ b/code/classes/SCDclass_expcode.m
@@ -379,7 +379,7 @@ classdef SCDclass_expcode
             for ii=1:numel(obj.exportedtps), fprintf('  ''%s''\n', char(obj.exportedtps{ii})); end
           end
           fprintf('* Configured MDS tunparams objects: %d (use printparameters method for details)\n', obj.mdscontainer.getnumparams);
-          fprintf('* Configured MDS wavegens objects: %d (use printwavegens method for details)\n', obj.mdscontainer.numwavegens);
+          fprintf('* Configured MDS wavegens objects: %d (use printwavegens method for details)\n', obj.mdscontainer.getnumwavegens);
           fprintf('* Configured general purpose tasks: %d (use printtasks method for details)\n', obj.taskcontainer.numtasks);
           fprintf('* Configured init scripts: %d (use printinits method for details)\n', numel(obj.algoobjlist));
         end
diff --git a/code/classes/SCDclass_mdsobjcontainer.m b/code/classes/SCDclass_mdsobjcontainer.m
index 9198a325200b20f63eb6a89e5e51f9f79faeb6ae..904efe46aa2357a71091794a7de1c6dd31a0e804 100644
--- a/code/classes/SCDclass_mdsobjcontainer.m
+++ b/code/classes/SCDclass_mdsobjcontainer.m
@@ -59,14 +59,6 @@ classdef SCDclass_mdsobjcontainer
             obj.mdswavegens=[obj.mdswavegens; wavegen];
         end
         
-        function obj = bindlastwavegen(obj, modelname, datadictionary, timingsrc)
-            if obj.getnumwavegens>0
-                obj.mdswavegens(end)=obj.mdswavegens(end).setmodelname(modelname);
-                obj.mdswavegens(end)=obj.mdswavegens(end).setdatadictionary(datadictionary);
-                obj.mdswavegens(end)=obj.mdswavegens(end).settiminginfo(timingsrc);                
-            end    
-        end
-        
         function obj = setwavegenbasestruct(obj, basestruct)
             if obj.getnumwavegens>0
                 for ii=1:obj.getnumwavegens
diff --git a/code/classes/SCDclass_mdspar.m b/code/classes/SCDclass_mdspar.m
index 9797b841702333be823bb5947ba9c7d07513f3ab..484bc29136737c6647f61577b30ab2280d008846 100644
--- a/code/classes/SCDclass_mdspar.m
+++ b/code/classes/SCDclass_mdspar.m
@@ -226,12 +226,6 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
             
         end
         
-        function obj = bind(obj,modelname,datadictionary,exportedtp)
-          obj = obj.setmodelname(modelname);
-          obj = obj.setdatadictionary(datadictionary);
-          obj = obj.setparamstructure(exportedtp);
-        end
-        
         function [mdsserver] = getMDSserver(obj)
           mdsserver = obj.mdsserver;
         end
@@ -278,6 +272,14 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
             out = {obj.modelparammarte}';
           end
         end
+             
+        function obj = bind(obj,modelname,datadictionary,exportedtp)
+          for ii=1:numel(obj)
+            obj(ii) = obj.setmodelname(modelname);
+            obj(ii) = obj.setdatadictionary(datadictionary);
+            obj(ii) = obj.setparamstructure(exportedtp);
+          end
+        end
     end
     
     methods 
diff --git a/code/classes/SCDclass_mdswg.m b/code/classes/SCDclass_mdswg.m
index 8ed0d10a56d3759e4d5d7d096fa83b4fef9c7b60..6fd2072fef0a450c37772677775beb3a55949685 100644
--- a/code/classes/SCDclass_mdswg.m
+++ b/code/classes/SCDclass_mdswg.m
@@ -62,6 +62,17 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
         
     end
     
+    % Sealed methods for heterogeneous arrays
+    methods(Sealed)
+      function obj = bind(obj,modelname,datadictionary,timingsrc)
+        for ii=1:numel(obj)
+          obj(ii) = obj(ii).setmodelname(modelname);
+          obj(ii) = obj(ii).setdatadictionary(datadictionary);
+          obj(ii) = obj(ii).settiminginfo(timingsrc);
+        end
+      end
+    end
+    
     % Not abstract methods common to all child classes
     methods
         function mdsconnect(obj, shot)
@@ -77,7 +88,7 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
             fprintf('  MDS+ source server: ''%s'', Tree: ''%s''\n', obj.mdsserver, obj.mdstree);
             fprintf('  MDS+ TDI expression: ''%s''\n',obj.tdiexpr);
         end
-        
+               
         function obj = settiminginfo(obj, timeinfo)
             obj.timebasestart=timeinfo.t_start;
             obj.timebasedt=timeinfo.dt;