diff --git a/jload.m b/jload.m
index ecaeae3b99c2cd90fd127a7ad4797aaa226f931e..fba169d9c1cdae3a8bb478f6495fad3dfd081614 100644
--- a/jload.m
+++ b/jload.m
@@ -3,6 +3,8 @@ function varargout=jload(filename, varargin)
 % jload
 %   or
 % jload(fname)
+% varlist=jload(fname)
+% [varlist, header]=jload(fname)
 % varlist=jload(fname,'param1',value1,'param2',value2,...)
 %
 % Load variables from a JSON or binary JSON file to a workspace
@@ -33,13 +35,16 @@ function varargout=jload(filename, varargin)
 %           can be used to adjust the parsing options
 %
 % output:
-%      varlist: a list of variables loaded
+%      varlist: a struct with each subfield a variable stored in the file,
+%               if output is ignored, the variables will be loaded to the
+%               workspace specified by the 'ws' option, which by default
+%               load the variables to the current workspace ('caller')
 %
 % examples:
 %      jload  % load all variables in jamdata.jamm to the 'caller' workspace 
 %      jload mydat.jamm
 %      jload('mydat.jamm','vars', {'v1','v2',...}) % load selected variables
-%      jload('mydat.jamm','simplifycell',1)
+%      varlist=jload('mydat.jamm','simplifycell',1)
 %
 % license:
 %     BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details 
@@ -48,7 +53,7 @@ function varargout=jload(filename, varargin)
 %
 
 if(nargin==0)
-    filename='jamdata.jamm';
+    filename=[pwd filesep 'jamdata.jamm'];
 end
 
 opt=varargin2struct(varargin{:});
@@ -75,11 +80,6 @@ else
     header=loadfun(filename,'ObjectID',1, varargin{:});
 end
 
-if(jsonopt('Header',0,opt))
-    varargout{1}=header;
-    return;
-end
-
 allvar=fieldnames(header.WorkspaceHeader);
 
 varlist=jsonopt('vars',allvar,opt);
@@ -96,10 +96,13 @@ else
     body=loadfun(filename,'ObjectID',2, varargin{:});
 end
 
-for i=1:length(varlist)
-    assignin(ws, varlist{i}, body.WorkspaceData.(varlist{i}));
-end
-
-if(nargout>1)
-    varargout{1}=varlist;
+if(nargout==0)
+    for i=1:length(varlist)
+        assignin(ws, varlist{i}, body.WorkspaceData.(varlist{i}));
+    end
+else
+    varargout{1}=rmfield(body.WorkspaceData,setdiff(fieldnames(body.WorkspaceData),varlist));
+    if(nargout>1)
+        varargout{2}=header;
+    end
 end
\ No newline at end of file
diff --git a/jsave.m b/jsave.m
index de1ba50af92dc710fcddd494ddb3db6e9a4f052c..88064ef63e2852e9dd2fd7ec3dca4a7ddee68fec 100644
--- a/jsave.m
+++ b/jsave.m
@@ -45,7 +45,7 @@ function varargout=jsave(filename, varargin)
 %
 
 if(nargin==0)
-    filename='jamdata.jamm';
+    filename=[pwd filesep 'jamdata.jamm'];
 end
 
 opt=varargin2struct(varargin{:});
diff --git a/loadbj.m b/loadbj.m
index 60cc0a03685191bf34417a033de73d5d23cd1a0d..847b8edaadee800ff9265cf1655928d7e010306c 100644
--- a/loadbj.m
+++ b/loadbj.m
@@ -63,8 +63,10 @@ function data = loadbj(fname,varargin)
        fid = fopen(fname,'rb');
        string = fread(fid,inf,'uint8=>char')';
        fclose(fid);
-    else
+    elseif(regexp(fname, '^\s*[\[\{SCHiUIulmLMhdDTFZN]'))
        string=fname;
+    else
+       error_pos('input file does not exist or buffer is invalid');
     end
 
     pos = 1; inputlen = length(string); inputstr = string;
@@ -156,7 +158,7 @@ function [object, pos] = parse_array(inputstr,  pos, varargin) % JSON array is w
         [cc,pos]=next_char(inputstr,pos);
         if(cc=='[')
             if(isfield(varargin{1},'noembedding_') && varargin{1}.noembedding_==1)
-                error('ND array size specifier does not support embedding');
+                error_pos('ND array size specifier does not support embedding');
             end
             varargin{1}.noembedding_=1;
             [dim, pos]=parse_array(inputstr, pos, varargin{:});
@@ -342,7 +344,7 @@ function pos=error_pos(msg, inputstr, pos)
     end
     msg = [sprintf(msg, pos) ': ' ...
     inputstr(poShow(1):poShow(2)) '<error>' inputstr(poShow(3):poShow(4)) ];
-    error( ['JSONLAB:InvalidFormat: ' msg] );
+    error( ['JSONLAB:BJData:InvalidFormat: ' msg] );
 end
 
 %%-------------------------------------------------------------------------
diff --git a/loadjson.m b/loadjson.m
index 59f3763366ecbe15f0b923ea79b9bd64d4e95826..69811ed1223215de1d4171fe6ff98fdd268729b1 100644
--- a/loadjson.m
+++ b/loadjson.m
@@ -100,7 +100,7 @@ function data = loadjson(fname,varargin)
            end
        end
     else
-       error('input file does not exist');
+       error_pos('input file does not exist');
     end
 
     pos = 1; inputlen = length(string); inputstr = string;
@@ -489,7 +489,7 @@ function pos=error_pos(msg, inputstr, pos)
     end
     msg = [sprintf(msg, pos) ': ' ...
     inputstr(poShow(1):poShow(2)) '<error>' inputstr(poShow(3):poShow(4)) ];
-    error( ['JSONLAB:InvalidFormat: ' msg] );
+    error( ['JSONLAB:JSON:InvalidFormat: ' msg] );
 end
 
 %%-------------------------------------------------------------------------
diff --git a/loadmsgpack.m b/loadmsgpack.m
index 87ec3b3fabd51f6d11a50783e8f47f3a79429894..7a257263cea2494e472258920a5569c341a74ca8 100644
--- a/loadmsgpack.m
+++ b/loadmsgpack.m
@@ -188,7 +188,7 @@ function [obj, idx] = parse(bytes, idx, varargin)
             len = double(bytes2scalar(bytes(idx+1:idx+4), 'uint32'));
             [obj, idx] = parsemap(len, bytes, idx+5, varargin{:});
         otherwise
-            error('transplant:parsemsgpack:unknowntype', ...
+            error('JSONLAB:MSGPACK:InvalidFormat', ...
                   ['Unknown type "' dec2bin(currentbyte) '"']);
     end
 end