diff --git a/code/classes/SCDclass_algo.m b/code/classes/SCDclass_algo.m
index ae84a6ff2c5a500690440bd59833b9ed2f71440c..9cee69a8c7db2c5a45abc03f710a090c9a833edd 100644
--- a/code/classes/SCDclass_algo.m
+++ b/code/classes/SCDclass_algo.m
@@ -213,26 +213,39 @@ classdef SCDclass_algo
        end
        
        %% Fixed inits
-       function obj = addfpinitfcn(obj, fcnname, targetstruct)
+       function obj = addfpinitfcn(obj, fcnname, targetstruct,targetworkspace)
+          if nargin<3
+            targetstruct = ''; 
+          end
+          if nargin<4
+            targetworkspace = 'global'; % default: global workspace (assigninGlobal)
+          end
+          
+          if ~iscell(targetstruct)
+            targetstruct = {targetstruct};
+          end
+         
            if(~isempty(obj.stdinits))
                for ii=1:numel(obj.stdinits)
-                   if(strcmp(char(obj.stdinits{ii}{2}),targetstruct))
-                       warning('SCDclass_algo:addfpinitfcn','A function driving the structure %s has already been added, ignoring.\d',targetstruct)
-                       return;
+                   if contains(char(obj.stdinits{ii}{2}),targetstruct)
+                       warning('SCDclass_algo:addfpinitfcn','A function defining the structure %s has already been added, ignoring.\d',targetstruct)
+                       return
                    end
                end
            end
            
+           % FF question to CG: why is this a cell and not a struct?
            temp=cell(10,1);
            temp{1}=fcnname;
            temp{2}=targetstruct;
+           temp{3}=targetworkspace;
            obj.stdinits{end+1}=temp;
        end
        
        function printinits(obj)
            if(~isempty(obj.stdinits))
                for ii=1:numel(obj.stdinits)
-                   fprintf('%s -> %s\n',char(obj.stdinits{ii}{1}),char(obj.stdinits{ii}{2}));
+                   fprintf('%s -> %s in workspace %s \n',char(obj.stdinits{ii}{1}),char(obj.stdinits{ii}{2},obj.stdinits{ii}{3}));
                end
            end
        end
@@ -244,29 +257,41 @@ classdef SCDclass_algo
               for ii=1:numel(obj.stdinits)
                  
                   initfunction = obj.stdinits{ii}{1};
-                  targetname = obj.stdinits{ii}{2};
+                  targetnames = obj.stdinits{ii}{2};
+                  workspace = obj.stdinits{ii}{3};
+                  
+                  nout = numel(targetnames);
                   
                   fprintf('Calling init function ''%s'', assigning its output to ''%s'' ...\n',...
-                    char(initfunction),char(targetname));
+                    char(initfunction),cell2str(targetnames));
 
                   if ischar(initfunction)
                     initcmd=sprintf('%s(obj);', initfunction);
-                    value = eval(initcmd);
+                    [value{1:nout}] = eval(initcmd);
                   elseif isa(initfunction,'function_handle')
                     if nargin(initfunction)==1
-                      value = initfunction(obj); % function has an input argument
+                      [value{1:nout}] = initfunction(obj); % function has an input argument
                     elseif nargin(initfunction)==0
-                      value = initfunction(); % no input arguments
+                      [value{1:nout}] = initfunction(); % no input arguments
                     else
                       error('unexpected number of input arguments for function %s',func2str(initfunction));
                     end
                   else
                     error('initfunction must be a string or a function handle')
                   end
-                    
+                  
                   % assigns in base workspace or datadictionary depending
-                  % on where the target variable is
-                  Simulink.data.assigninGlobal(obj.modelname, targetname, value);
+                  % on target workspace
+                  for iout = 1:nout
+                    % cycle over number of output arguments of the function
+                    val = value{iout};
+                    target = targetnames{iout};
+                    if strcmp(workspace,'global')
+                      Simulink.data.assigninGlobal(obj.modelname, target, val);
+                    elseif strcmp(workspace,'base')
+                      assignin('base',target,val)
+                    end
+                  end
               end
           end
        end