diff --git a/loadjson.m b/loadjson.m
index eaeb1b2f8b7be3f583273952815f94bffe3bb4d6..9fe09955dad9423f90dfa25b070c8ec055de24ff 100644
--- a/loadjson.m
+++ b/loadjson.m
@@ -129,7 +129,7 @@ function object = parse_object(varargin)
             end
             parse_char(':');
             val = parse_value(varargin{:});
-            eval( sprintf( 'object.%s  = val;', valid_field(str) ) );
+            object.(valid_field(str))=val;
             if next_char == '}'
                 break;
             end
@@ -156,7 +156,7 @@ global pos inStr isoct
 
     if next_char ~= ']'
 	if(jsonopt('FastArrayParser',1,varargin{:})>=1 && arraydepth>=jsonopt('FastArrayParser',1,varargin{:}))
-            [endpos, e1l, e1r, maxlevel]=matching_bracket(inStr,pos);
+            [endpos, e1l, e1r]=matching_bracket(inStr,pos);
             arraystr=['[' inStr(pos:endpos)];
             arraystr=regexprep(arraystr,'"_NaN_"','NaN');
             arraystr=regexprep(arraystr,'"([-+]*)_Inf_"','$1Inf');
@@ -228,7 +228,7 @@ global pos inStr isoct
         object=cell2mat(object')';
         if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0)
             object=oldobj;
-        elseif(size(object,1)>1 && ndims(object)==2)
+        elseif(size(object,1)>1 && ismatrix(object))
             object=object';
         end
       catch
@@ -292,7 +292,8 @@ function str = parseStr(varargin)
             str = [str inStr(pos:esc(index_esc)-1)];
             pos = esc(index_esc);
         end
-        nstr = length(str); switch inStr(pos)
+        nstr = length(str);
+        switch inStr(pos)
             case '"'
                 pos = pos + 1;
                 if(~isempty(str))
@@ -325,7 +326,8 @@ function str = parseStr(varargin)
                         pos = pos + 5;
                 end
             otherwise % should never happen
-                str(nstr+1) = inStr(pos), keyboard
+                str(nstr+1) = inStr(pos);
+                keyboard;
                 pos = pos + 1;
         end
     end
@@ -338,7 +340,7 @@ function num = parse_number(varargin)
     currstr=inStr(pos:min(pos+30,end));
     if(isoct~=0)
         numstr=regexp(currstr,'^\s*-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+\-]?\d+)?','end');
-        [num, one] = sscanf(currstr, '%f', 1);
+        [num] = sscanf(currstr, '%f', 1);
         delta=numstr+1;
     else
         [num, one, err, delta] = sscanf(currstr, '%f', 1);
@@ -418,12 +420,16 @@ global isoct
             str=sprintf('x0x%X_%s',char(str(1)),str(2:end));
         end
     end
-    if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) return;  end
+    if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' )))
+        return;
+    end
     if(~isoct)
         str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_');
     else
         pos=regexp(str,'[^0-9A-Za-z_]');
-        if(isempty(pos)) return; end
+        if(isempty(pos))
+            return;
+        end
         str0=str;
         pos0=[0 pos(:)' length(str)];
         str='';
@@ -465,14 +471,18 @@ while(pos<=len)
     c=tokens(pos);
     if(c==']')
         level=level-1;
-        if(isempty(e1r)) e1r=bpos(pos); end
+        if(isempty(e1r))
+            e1r=bpos(pos);
+        end
         if(level==0)
             endpos=bpos(pos);
             return
         end
     end
     if(c=='[')
-        if(isempty(e1l)) e1l=bpos(pos); end
+        if(isempty(e1l))
+            e1l=bpos(pos);
+        end
         level=level+1;
         maxlevel=max(maxlevel,level);
     end
diff --git a/loadubjson.m b/loadubjson.m
index 62b8ff7daf6d9023113f503d264e470ed04cd4be..5bed1669353c9cfae4bed3fb65b4c3685891496f 100644
--- a/loadubjson.m
+++ b/loadubjson.m
@@ -94,17 +94,6 @@ if(jsoncount==1 && iscell(data))
     data=data{1};
 end
 
-%%
-function newdata=parse_collection(id,data,obj)
-
-if(jsoncount>0 && exist('data','var')) 
-    if(~iscell(data))
-       newdata=cell(1);
-       newdata{1}=data;
-       data=newdata;
-    end
-end
-
 %%-------------------------------------------------------------------------
 function object = parse_object(varargin)
     parse_char('{');
@@ -133,7 +122,7 @@ function object = parse_object(varargin)
             %parse_char(':');
             val = parse_value(varargin{:});
             num=num+1;
-            eval( sprintf( 'object.%s  = val;', valid_field(str) ) );
+            object.(valid_field(str))=val;
             if next_char == '}' || (count>=0 && num>=count)
                 break;
             end
@@ -181,7 +170,7 @@ adv=double(len*count);
 
 
 function object = parse_array(varargin) % JSON array is written in row-major order
-global pos inStr isoct
+global pos inStr
     parse_char('[');
     object = cell(0, 1);
     dim=[];
@@ -234,7 +223,7 @@ global pos inStr isoct
         object=cell2mat(object')';
         if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0)
             object=oldobj;
-        elseif(size(object,1)>1 && ndims(object)==2)
+        elseif(size(object,1)>1 && ismatrix(object))
             object=object';
         end
       catch
@@ -334,7 +323,7 @@ function num = parse_number(varargin)
 %%-------------------------------------------------------------------------
 
 function val = parse_value(varargin)
-    global pos inStr len
+    global pos inStr
 
     switch(inStr(pos))
         case {'S','C','H'}
@@ -391,12 +380,16 @@ global isoct
             str=sprintf('x0x%X_%s',char(str(1)),str(2:end));
         end
     end
-    if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) return;  end
+    if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' )))
+        return;
+    end
     if(~isoct)
         str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_');
     else
         pos=regexp(str,'[^0-9A-Za-z_]');
-        if(isempty(pos)) return; end
+        if(isempty(pos))
+            return;
+        end
         str0=str;
         pos0=[0 pos(:)' length(str)];
         str='';
@@ -438,14 +431,18 @@ while(pos<=len)
     c=tokens(pos);
     if(c==']')
         level=level-1;
-        if(isempty(e1r)) e1r=bpos(pos); end
+        if(isempty(e1r))
+            e1r=bpos(pos);
+        end
         if(level==0)
             endpos=bpos(pos);
             return
         end
     end
     if(c=='[')
-        if(isempty(e1l)) e1l=bpos(pos); end
+        if(isempty(e1l))
+            e1l=bpos(pos);
+        end
         level=level+1;
         maxlevel=max(maxlevel,level);
     end
diff --git a/savejson.m b/savejson.m
index 4e16d58086ef618ca8fa8e4f57f4d26856c1e590..57125fe0b9c297eef4c2c8a1da830d10d0dc1ee9 100644
--- a/savejson.m
+++ b/savejson.m
@@ -194,16 +194,26 @@ elseif(len==0)
     end
 end
 for j=1:dim(2)
-    if(dim(1)>1) txt=sprintf('%s%s[%s',txt,padding2,nl); end
+    if(dim(1)>1)
+        txt=sprintf('%s%s[%s',txt,padding2,nl);
+    end
     for i=1:dim(1)
        txt=sprintf('%s%s',txt,obj2json(name,item{i,j},level+(dim(1)>1)+(len>1),varargin{:}));
-       if(i<dim(1)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
+       if(i<dim(1))
+           txt=sprintf('%s%s',txt,sprintf(',%s',nl));
+       end
+    end
+    if(dim(1)>1)
+        txt=sprintf('%s%s%s]',txt,nl,padding2);
+    end
+    if(j<dim(2))
+        txt=sprintf('%s%s',txt,sprintf(',%s',nl));
     end
-    if(dim(1)>1) txt=sprintf('%s%s%s]',txt,nl,padding2); end
-    if(j<dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
     %if(j==dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
 end
-if(len>1) txt=sprintf('%s%s%s]',txt,nl,padding0); end
+if(len>1)
+    txt=sprintf('%s%s%s]',txt,nl,padding0);
+end
 
 %%-------------------------------------------------------------------------
 function txt=struct2json(name,item,level,varargin)
@@ -234,12 +244,18 @@ if(isempty(item))
     return;
 end
 if(~isempty(name)) 
-    if(forcearray) txt=sprintf('%s"%s": [%s',padding0,checkname(name,varargin{:}),nl); end
+    if(forcearray)
+        txt=sprintf('%s"%s": [%s',padding0,checkname(name,varargin{:}),nl);
+    end
 else
-    if(forcearray) txt=sprintf('%s[%s',padding0,nl); end
+    if(forcearray)
+        txt=sprintf('%s[%s',padding0,nl);
+    end
 end
 for j=1:dim(2)
-  if(dim(1)>1) txt=sprintf('%s%s[%s',txt,padding2,nl); end
+  if(dim(1)>1)
+      txt=sprintf('%s%s[%s',txt,padding2,nl);
+  end
   for i=1:dim(1)
     names = fieldnames(item(i,j));
     if(~isempty(name) && len==1 && ~forcearray)
@@ -249,19 +265,29 @@ for j=1:dim(2)
     end
     if(~isempty(names))
       for e=1:length(names)
-	    txt=sprintf('%s%s',txt,obj2json(names{e},getfield(item(i,j),...
-             names{e}),level+(dim(1)>1)+1+forcearray,varargin{:}));
-        if(e<length(names)) txt=sprintf('%s%s',txt,','); end
+	    txt=sprintf('%s%s',txt,obj2json(names{e},item(i,j).(names{e}),...
+             level+(dim(1)>1)+1+forcearray,varargin{:}));
+        if(e<length(names))
+            txt=sprintf('%s%s',txt,',');
+        end
         txt=sprintf('%s%s',txt,nl);
       end
     end
     txt=sprintf('%s%s}',txt,padding1);
-    if(i<dim(1)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
+    if(i<dim(1))
+        txt=sprintf('%s%s',txt,sprintf(',%s',nl));
+    end
   end
-  if(dim(1)>1) txt=sprintf('%s%s%s]',txt,nl,padding2); end
-  if(j<dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
+  if(dim(1)>1)
+      txt=sprintf('%s%s%s]',txt,nl,padding2);
+  end
+  if(j<dim(2))
+      txt=sprintf('%s%s',txt,sprintf(',%s',nl));
+  end
+end
+if(forcearray)
+    txt=sprintf('%s%s%s]',txt,nl,padding0);
 end
-if(forcearray) txt=sprintf('%s%s%s]',txt,nl,padding0); end
 
 %%-------------------------------------------------------------------------
 function txt=str2json(name,item,level,varargin)
@@ -279,24 +305,33 @@ nl=ws.newline;
 sep=ws.sep;
 
 if(~isempty(name)) 
-    if(len>1) txt=sprintf('%s"%s": [%s',padding1,checkname(name,varargin{:}),nl); end
+    if(len>1)
+        txt=sprintf('%s"%s": [%s',padding1,checkname(name,varargin{:}),nl);
+    end
 else
-    if(len>1) txt=sprintf('%s[%s',padding1,nl); end
+    if(len>1)
+        txt=sprintf('%s[%s',padding1,nl);
+    end
 end
-isoct=jsonopt('IsOctave',0,varargin{:});
 for e=1:len
     val=escapejsonstring(item(e,:));
     if(len==1)
         obj=['"' checkname(name,varargin{:}) '": ' '"',val,'"'];
-	if(isempty(name)) obj=['"',val,'"']; end
+        if(isempty(name))
+            obj=['"',val,'"'];
+        end
         txt=sprintf('%s%s%s%s',txt,padding1,obj);
     else
         txt=sprintf('%s%s%s%s',txt,padding0,['"',val,'"']);
     end
-    if(e==len) sep=''; end
+    if(e==len)
+        sep='';
+    end
     txt=sprintf('%s%s',txt,sep);
 end
-if(len>1) txt=sprintf('%s%s%s%s',txt,nl,padding1,']'); end
+if(len>1)
+    txt=sprintf('%s%s%s%s',txt,nl,padding1,']');
+end
 
 %%-------------------------------------------------------------------------
 function txt=mat2json(name,item,level,varargin)
@@ -441,7 +476,9 @@ if(isunpack)
     else
         pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start');
         pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end');
-        if(isempty(pos)) return; end
+        if(isempty(pos))
+            return;
+        end
         str0=name;
         pos0=[0 pend(:)' length(name)];
         newname='';
@@ -460,7 +497,9 @@ newstr=str;
 isoct=exist('OCTAVE_VERSION','builtin');
 if(isoct)
    vv=sscanf(OCTAVE_VERSION,'%f');
-   if(vv(1)>=3.8) isoct=0; end
+   if(vv(1)>=3.8)
+       isoct=0;
+   end
 end
 if(isoct)
   escapechars={'\\','\"','\/','\a','\f','\n','\r','\t','\v'};
diff --git a/saveubjson.m b/saveubjson.m
index a9f384c85674f6ce88a9831f6aa9373b5a0312ca..558a1160562aea261678b5016f0d8a6d0de541ca 100644
--- a/saveubjson.m
+++ b/saveubjson.m
@@ -160,13 +160,19 @@ elseif(len==0)
     end
 end
 for j=1:dim(2)
-    if(dim(1)>1) txt=[txt '[']; end
+    if(dim(1)>1)
+        txt=[txt '['];
+    end
     for i=1:dim(1)
        txt=[txt obj2ubjson(name,item{i,j},level+(len>1),varargin{:})];
     end
-    if(dim(1)>1) txt=[txt ']']; end
+    if(dim(1)>1)
+        txt=[txt ']'];
+    end
+end
+if(len>1)
+    txt=[txt ']'];
 end
-if(len>1) txt=[txt ']']; end
 
 %%-------------------------------------------------------------------------
 function txt=struct2ubjson(name,item,level,varargin)
@@ -183,12 +189,18 @@ len=numel(item);
 forcearray= (len>1 || (jsonopt('NoRowBracket',1,varargin{:})==0 && level>0));
 
 if(~isempty(name)) 
-    if(forcearray) txt=[N_(checkname(name,varargin{:})) '[']; end
+    if(forcearray)
+        txt=[N_(checkname(name,varargin{:})) '['];
+    end
 else
-    if(forcearray) txt='['; end
+    if(forcearray)
+        txt='[';
+    end
 end
 for j=1:dim(2)
-  if(dim(1)>1) txt=[txt '[']; end
+  if(dim(1)>1)
+      txt=[txt '['];
+  end
   for i=1:dim(1)
      names = fieldnames(item(i,j));
      if(~isempty(name) && len==1 && ~forcearray)
@@ -198,15 +210,19 @@ for j=1:dim(2)
      end
      if(~isempty(names))
        for e=1:length(names)
-	     txt=[txt obj2ubjson(names{e},getfield(item(i,j),...
-             names{e}),level+(dim(1)>1)+1+forcearray,varargin{:})];
+	     txt=[txt obj2ubjson(names{e},item(i,j).(names{e}),...
+             level+(dim(1)>1)+1+forcearray,varargin{:})];
        end
      end
      txt=[txt '}'];
   end
-  if(dim(1)>1) txt=[txt ']']; end
+  if(dim(1)>1)
+      txt=[txt ']'];
+  end
+end
+if(forcearray)
+    txt=[txt ']'];
 end
-if(forcearray) txt=[txt ']']; end
 
 %%-------------------------------------------------------------------------
 function txt=str2ubjson(name,item,level,varargin)
@@ -218,22 +234,29 @@ item=reshape(item, max(size(item),[1 0]));
 len=size(item,1);
 
 if(~isempty(name)) 
-    if(len>1) txt=[N_(checkname(name,varargin{:})) '[']; end
+    if(len>1)
+        txt=[N_(checkname(name,varargin{:})) '['];
+    end
 else
-    if(len>1) txt='['; end
+    if(len>1)
+        txt='[';
+    end
 end
-isoct=jsonopt('IsOctave',0,varargin{:});
 for e=1:len
     val=item(e,:);
     if(len==1)
         obj=[N_(checkname(name,varargin{:})) '' '',S_(val),''];
-	if(isempty(name)) obj=['',S_(val),'']; end
+        if(isempty(name))
+            obj=['',S_(val),''];
+        end
         txt=[txt,'',obj];
     else
         txt=[txt,'',['',S_(val),'']];
     end
 end
-if(len>1) txt=[txt ']']; end
+if(len>1)
+    txt=[txt ']'];
+end
 
 %%-------------------------------------------------------------------------
 function txt=mat2ubjson(name,item,level,varargin)
@@ -311,9 +334,6 @@ if(isempty(mat))
     txt='Z';
     return;
 end
-if(size(mat,1)==1)
-    level=level-1;
-end
 type='';
 hasnegtive=(mat<0);
 if(isa(mat,'integer') || isinteger(mat) || (isfloat(mat) && all(mod(mat(:),1) == 0)))
@@ -325,11 +345,11 @@ if(isa(mat,'integer') || isinteger(mat) || (isfloat(mat) && all(mod(mat(:),1) ==
     if(isempty(type))
         % todo - need to consider negative ones separately
         id= histc(abs(max(mat(:))),[0 2^7 2^15 2^31 2^63]);
-        if(isempty(find(id)))
+        if(isempty(id~=0))
             error('high-precision data is not yet supported');
         end
         key='iIlL';
-	type=key(find(id));
+	type=key(id~=0);
     end
     txt=[I_a(mat(:),type,size(mat))];
 elseif(islogical(mat))
@@ -373,7 +393,9 @@ if(isunpack)
     else
         pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start');
         pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end');
-        if(isempty(pos)) return; end
+        if(isempty(pos))
+            return;
+        end
         str0=name;
         pos0=[0 pend(:)' length(name)];
         newname='';