diff --git a/matlab/parallel/dynareParallelGetFiles.m b/matlab/parallel/dynareParallelGetFiles.m
index 2c81d8692185bd3e69f4430c28ce957dbd086d4f..0f0e29c2142c4fba0187ebd62bd0a9a302f6f4b1 100644
--- a/matlab/parallel/dynareParallelGetFiles.m
+++ b/matlab/parallel/dynareParallelGetFiles.m
@@ -6,8 +6,8 @@ function dynareParallelGetFiles(NamFileInput,PRCDir,Parallel)
 %
 % INPUTS
 %  o NamFileInput   []   ...
-%  o PRCDir         []   ... 
-%  o Parallel       []   ...  
+%  o PRCDir         []   ...
+%  o Parallel       []   ...
 %
 %  OUTPUTS
 %  None
@@ -43,9 +43,46 @@ for indPC=1:length(Parallel),
     if Parallel(indPC).Local==0,
         if ~ispc, %isunix || (~matlab_ver_less_than('7.4') && ismac),
             for jfil=1:size(NamFileInput,1),
-                %                 if ~isempty(dynareParallelDir(NamFileInput{jfil,2},[PRCDir,filesep,NamFileInput{jfil,1}],Parallel(indPC))),
-                [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',NamFileInput{jfil,1}]);
-                %                 end
+                % if ~isempty(dynareParallelDir(NamFileInput{jfil,2},[PRCDir,filesep,NamFileInput{jfil,1}],Parallel(indPC))),
+
+                if exist('OCTAVE_VERSION') % Patch for peculiar behaviour of ls under Linux.
+                    % It is necessary to manage the jolly char '*'!
+
+                    FindAst=strfind(NamFileInput{jfil,2},'comp_status_random_walk_metropolis_hastings_core*');
+                    
+                    if isempty (FindAst)
+
+                        [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',NamFileInput{jfil,1}]);
+
+                    else
+
+                        filenameTemp=NamFileInput{jfil,2};
+                        
+                        [NotUsed FlI]=system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' ls ',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',filenameTemp, ' 2> OctaveStandardOutputMessage.txt']);
+                        
+                        if isempty (FlI)
+                            return
+                        end
+
+                        AstPos=strfind(filenameTemp,'.mat')-1;
+                        FiMat=findstr(FlI, '.mat');
+                        NumFileToCopy=length(FiMat);
+
+
+                        for i=1: NumFileToCopy
+                            Ni=num2str(i);
+                            filenameTemp(1,AstPos)=Ni;
+                            [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},filenameTemp,' ',NamFileInput{jfil,1}]);
+                        end
+                    end
+
+                else
+
+                    [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',NamFileInput{jfil,1}]);
+                end
+
+
+                % end
             end
         else
             for jfil=1:size(NamFileInput,1),
diff --git a/matlab/parallel/dynareParallelSendFiles.m b/matlab/parallel/dynareParallelSendFiles.m
index 3728ac3658ff97441053d31eeb8569e528d47e97..838499fe73d54e73f1957e785978cf243c677529 100644
--- a/matlab/parallel/dynareParallelSendFiles.m
+++ b/matlab/parallel/dynareParallelSendFiles.m
@@ -6,8 +6,8 @@ function dynareParallelSendFiles(NamFileInput,PRCDir,Parallel)
 %
 % INPUTS
 %  o NamFileInput   []   ...
-%  o PRCDir         []   ... 
-%  o Parallel       []   ...  
+%  o PRCDir         []   ...
+%  o Parallel       []   ...
 %
 %  OUTPUTS
 %  None
@@ -44,7 +44,7 @@ for indPC=1:length(Parallel),
         if ~ispc, %isunix || (~matlab_ver_less_than('7.4') && ismac),
             for jfil=1:size(NamFileInput,1),
                 if ~isempty(NamFileInput{jfil,1})
-                    system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' mkdir -p ',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1}])
+                    [NonServeL NonServeR]=system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' mkdir -p ',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1}]);
                 end
                 [NonServeL NonServeR]=system(['scp ',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1}]);
             end
@@ -52,10 +52,56 @@ for indPC=1:length(Parallel),
             for jfil=1:size(NamFileInput,1)
                 if ~isempty(NamFileInput{jfil,1})
                     if isempty(dynareParallelDir(NamFileInput{jfil,1},PRCDir,Parallel(indPC)))
-                        mkdir(['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}]);
+                        
+                        if exist('OCTAVE_VERSION') % Patch for peculiar behaviour of mkdir under Windows.
+                            
+                            % It is Necessary because Octave is not able to
+                            % create two nested directory at the same time.
+                            
+                           % Remove (if present) the '/' chars. Can be easily transformed
+                           % in a function.
+                           
+                            NamFileInputTemp=NamFileInput{jfil,1};
+                            while(1)
+                                Bs=strfind(NamFileInputTemp,'/');
+                                if isempty(Bs),
+                                    break;
+                                else
+                                    NamFileInputTemp(1,Bs)='\';
+                                end
+                            end
+                            
+                            [NonServeL NonServeR]=system(['mkdir \\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInputTemp]);
+
+                        else
+                            mkdir(['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}]);
+                        end
+                    end
+                end
+                
+                if exist('OCTAVE_VERSION') % Patch for peculiar behaviour copyfile ls under Windows.
+                    
+                    % It is Necessary because Octave is not able to
+                    % use the jolly char '*' with copyfile.
+                    
+                      % Remove (if present) the '/' chars. Can be easily transformed
+                      % in a function.
+                    
+                    NamFileInputTemp=NamFileInput{jfil,1};
+                    while(1)
+                        Bs=strfind(NamFileInputTemp,'/');
+                        if isempty(Bs),
+                            break;
+                        else
+                            NamFileInputTemp(1,Bs)='\';
+                        end
                     end
+                    
+                    [NonServeS NonServeD]=system(['copy ',NamFileInputTemp, NamFileInput{jfil,2},' \\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInputTemp]);
+                    
+                else
+                    copyfile([NamFileInput{jfil,1},NamFileInput{jfil,2}],['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}]);
                 end
-                copyfile([NamFileInput{jfil,1},NamFileInput{jfil,2}],['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}])
             end
         end
     end
diff --git a/matlab/pm3.m b/matlab/pm3.m
index 267078106ac4592e54d23cd66d9c451a5128437d..129ac2f61df80b4822fd94b33b5958dcc96d6a2c 100644
--- a/matlab/pm3.m
+++ b/matlab/pm3.m
@@ -85,7 +85,7 @@ for i = 1:nvar
     eval(['oo_.' name3 '.HPDsup.' name ' = HPD(2,:,i);']);
 end
 %%
-%%      Finally I build the plots.
+%% 	Finally I build the plots.
 %%
 
 % Block of code executed in parallel, with the exception of file
@@ -147,16 +147,24 @@ localVars.tit3=tit3;
 localVars.Mean=Mean;
 % Like sequential execution!
 
+
+if ~exist('OCTAVE_VERSION')
 % Commenting for testing!
 if isnumeric(options_.parallel) || ceil(size(varlist,1)/MaxNumberOfPlotsPerFigure)<4,
-    fout = pm3_core(localVars,1,nvar,0);
-    
-    % Parallel execution!
-else
+      fout = pm3_core(localVars,1,nvar,0);
+ 
+ % Parallel execution!
+ else
     globalVars = struct('M_',M_, ...
-                        'options_', options_, ...
-                        'oo_', oo_);
-    [fout, nBlockPerCPU, totCPU] = masterParallel(options_.parallel, 1, nvar, [],'pm3_core', localVars,globalVars, options_.parallel_info);
+      'options_', options_, ...
+      'oo_', oo_);
+     [fout, nBlockPerCPU, totCPU] = masterParallel(options_.parallel, 1, nvar, [],'pm3_core', localVars,globalVars, options_.parallel_info);
+ end
+else
+    % For the time being in Octave enviroment the pm3.m is executed only in
+    % serial modality, to avoid problem with the plots.
+    
+    fout = pm3_core(localVars,1,nvar,0);
 end