diff --git a/savejson.m b/savejson.m
index 09ba1dd1b742c220b79927f6b2f9bec8453efe8b..e8ffb2381248a8388e91c73940ad9bcbba63d122 100644
--- a/savejson.m
+++ b/savejson.m
@@ -150,12 +150,13 @@ if(~isempty(jsonp))
 end
 
 % save to a file if FileName is set, suggested by Patrick Rapin
-if(~isempty(jsonopt('FileName','',opt)))
+filename=jsonopt('FileName','',opt);
+if(~isempty(filename))
     if(jsonopt('SaveBinary',0,opt)==1)
-	    fid = fopen(opt.filename, 'wb');
+	    fid = fopen(filename, 'wb');
 	    fwrite(fid,json);
     else
-	    fid = fopen(opt.filename, 'wt');
+	    fid = fopen(filename, 'wt');
 	    fwrite(fid,json,'char');
     end
     fclose(fid);
@@ -178,7 +179,7 @@ end
 
 %%-------------------------------------------------------------------------
 function txt=cell2json(name,item,level,varargin)
-txt='';
+txt={};
 if(~iscell(item))
         error('input is not a cell');
 end
@@ -196,42 +197,43 @@ nl=ws.newline;
 bracketlevel=~jsonopt('singletcell',1,varargin{:});
 if(len>bracketlevel)
     if(~isempty(name))
-        txt=sprintf('%s"%s": [%s',padding0, checkname(name,varargin{:}),nl); name=''; 
+        txt={padding0, '"', checkname(name,varargin{:}),'": [', nl}; name=''; 
     else
-        txt=sprintf('%s[%s',padding0,nl); 
+        txt={padding0, '[', nl};
     end
 elseif(len==0)
     if(~isempty(name))
-        txt=sprintf('%s"%s": []',padding0, checkname(name,varargin{:})); name=''; 
+        txt={padding0, '"' checkname(name,varargin{:}) '": []'}; name=''; 
     else
-        txt=sprintf('%s[]',padding0); 
+        txt={padding0, '[]'};
     end
 end
 for i=1:dim(1)
     if(dim(1)>1)
-        txt=sprintf('%s%s[%s',txt,padding2,nl);
+        txt(end+1:end+3)={padding2,'[',nl};
     end
     for j=1:dim(2)
-       txt=sprintf('%s%s',txt,obj2json(name,item{i,j},level+(dim(1)>1)+(len>bracketlevel),varargin{:}));
+       txt{end+1}=obj2json(name,item{i,j},level+(dim(1)>1)+(len>bracketlevel),varargin{:});
        if(j<dim(2))
-           txt=sprintf('%s%s',txt,sprintf(',%s',nl));
+           txt(end+1:end+2)={',' nl};
        end
     end
     if(dim(1)>1)
-        txt=sprintf('%s%s%s]',txt,nl,padding2);
+        txt(end+1:end+3)={nl,padding2,']'};
     end
     if(i<dim(1))
-        txt=sprintf('%s%s',txt,sprintf(',%s',nl));
+        txt(end+1:end+2)={',' nl};
     end
     %if(j==dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
 end
 if(len>bracketlevel)
-    txt=sprintf('%s%s%s]',txt,nl,padding0);
+    txt(end+1:end+3)={nl,padding0,']'};
 end
+txt = sprintf('%s',txt{:});
 
 %%-------------------------------------------------------------------------
 function txt=struct2json(name,item,level,varargin)
-txt='';
+txt={};
 if(~isstruct(item))
 	error('input is not a struct');
 end
@@ -251,61 +253,62 @@ nl=ws.newline;
 
 if(isempty(item)) 
     if(~isempty(name)) 
-        txt=sprintf('%s"%s": []',padding0,checkname(name,varargin{:}));
+        txt={padding0, '"', checkname(name,varargin{:}),'": []'};
     else
-        txt=sprintf('%s[]',padding0);
+        txt={padding0, '[]'};
     end
     return;
 end
 if(~isempty(name)) 
     if(forcearray)
-        txt=sprintf('%s"%s": [%s',padding0,checkname(name,varargin{:}),nl);
+        txt={padding0, '"', checkname(name,varargin{:}),'": [', nl};
     end
 else
     if(forcearray)
-        txt=sprintf('%s[%s',padding0,nl);
+        txt={padding0, '[', nl};
     end
 end
 for j=1:dim(2)
   if(dim(1)>1)
-      txt=sprintf('%s%s[%s',txt,padding2,nl);
+      txt(end+1:end+3)={padding2,'[',nl};
   end
   for i=1:dim(1)
     names = fieldnames(item(i,j));
     if(~isempty(name) && len==1 && ~forcearray)
-        txt=sprintf('%s%s"%s": {%s',txt,padding1, checkname(name,varargin{:}),nl); 
+        txt(end+1:end+5)={padding1, '"', checkname(name,varargin{:}),'": {', nl};
     else
-        txt=sprintf('%s%s{%s',txt,padding1,nl); 
+        txt(end+1:end+3)={padding1, '{', nl};
     end
     if(~isempty(names))
       for e=1:length(names)
-	    txt=sprintf('%s%s',txt,obj2json(names{e},item(i,j).(names{e}),...
-             level+(dim(1)>1)+1+forcearray,varargin{:}));
+	    txt{end+1}=obj2json(names{e},item(i,j).(names{e}),...
+             level+(dim(1)>1)+1+forcearray,varargin{:});
         if(e<length(names))
-            txt=sprintf('%s%s',txt,',');
+            txt{end+1}=',';
         end
-        txt=sprintf('%s%s',txt,nl);
+        txt{end+1}=nl;
       end
     end
-    txt=sprintf('%s%s}',txt,padding1);
+    txt(end+1:end+2)={padding1,'}'};
     if(i<dim(1))
-        txt=sprintf('%s%s',txt,sprintf(',%s',nl));
+        txt(end+1:end+2)={',' nl};
     end
   end
   if(dim(1)>1)
-      txt=sprintf('%s%s%s]',txt,nl,padding2);
+      txt(end+1:end+3)={nl,padding2,']'};
   end
   if(j<dim(2))
-      txt=sprintf('%s%s',txt,sprintf(',%s',nl));
+      txt(end+1:end+2)={',' nl};
   end
 end
 if(forcearray)
-    txt=sprintf('%s%s%s]',txt,nl,padding0);
+    txt(end+1:end+3)={nl,padding0,']'};
 end
+txt = sprintf('%s',txt{:});
 
 %%-------------------------------------------------------------------------
 function txt=str2json(name,item,level,varargin)
-txt='';
+txt={};
 if(~ischar(item))
         error('input is not a string');
 end
@@ -320,11 +323,11 @@ sep=ws.sep;
 
 if(~isempty(name)) 
     if(len>1)
-        txt=sprintf('%s"%s": [%s',padding1,checkname(name,varargin{:}),nl);
+        txt={padding1, '"', checkname(name,varargin{:}),'": [', nl};
     end
 else
     if(len>1)
-        txt=sprintf('%s[%s',padding1,nl);
+        txt={padding1, '[', nl};
     end
 end
 for e=1:len
@@ -334,18 +337,19 @@ for e=1:len
         if(isempty(name))
             obj=['"',val,'"'];
         end
-        txt=sprintf('%s%s%s%s',txt,padding1,obj);
+        txt(end+1:end+2)={padding1, obj};
     else
-        txt=sprintf('%s%s%s%s',txt,padding0,['"',val,'"']);
+        txt(end+1:end+4)={padding0,'"',val,'"'};
     end
     if(e==len)
         sep='';
     end
-    txt=sprintf('%s%s',txt,sep);
+    txt{end+1}=sep;
 end
 if(len>1)
-    txt=sprintf('%s%s%s%s',txt,nl,padding1,']');
+    txt(end+1:end+3)={nl,padding1,']'};
 end
+txt = sprintf('%s',txt{:});
 
 %%-------------------------------------------------------------------------
 function txt=mat2json(name,item,level,varargin)
diff --git a/saveubjson.m b/saveubjson.m
index a91f75366189a7420fbfa5f09223ed8c74730dad..c238b76366d2f52a94bea23fcac1f727a8b07cb6 100644
--- a/saveubjson.m
+++ b/saveubjson.m
@@ -125,8 +125,9 @@ if(~isempty(jsonp))
 end
 
 % save to a file if FileName is set, suggested by Patrick Rapin
-if(~isempty(jsonopt('FileName','',opt)))
-    fid = fopen(opt.filename, 'wb');
+filename=jsonopt('FileName','',opt);
+if(~isempty(filename))
+    fid = fopen(filename, 'wb');
     fwrite(fid,json);
     fclose(fid);
 end