diff --git a/AUTHORS.txt b/AUTHORS.txt
index 80446a891155012e9f0c8ed615ba6c9b1e120fe1..9dd3fc7bc4ff19568019b38307a7f96c90a29e8c 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -34,3 +34,8 @@ This toolbox contains patches submitted by the following contributors:
   - loadjson crashes for sparse complex column vector.
   - Data is corrupted by savejson for sparse real row vector.
   - savejson crashes for sparse complex row vector. 
+
+- Yul Kang <yul.kang.on at gmail.com>
+  patches for svn revision 415.
+  - savejson saves an empty cell array as [] instead of null
+  - loadjson differentiates an empty struct from an empty array
diff --git a/ChangeLog.txt b/ChangeLog.txt
index f409e7672a9ec8bd7cb28c428c76dc8ff5d280a2..62be044b1c31107805388e8a56691719ca60ea68 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -6,6 +6,10 @@
 
 JSONlab ChangeLog (key features marked by *):
 
+== JSONlab 0.9.8-1 (codename: Optimus - alpha update 1), FangQ <fangq (at) nmr.mgh.harvard.edu> ==
+
+ 2013/10/07 Better round-trip conservation for empty arrays and structs (patch submitted by Yul Kang)
+
 == JSONlab 0.9.8 (codename: Optimus - alpha), FangQ <fangq (at) nmr.mgh.harvard.edu> ==
  2013/08/23 *Universal Binary JSON (UBJSON) support, including both saveubjson and loadubjson
 
diff --git a/README.txt b/README.txt
index 83616b81a6e3df9b18f85ce0917a1c43b2fb5727..f77dd05757af773837eff75aac068de7da333206 100644
--- a/README.txt
+++ b/README.txt
@@ -315,7 +315,7 @@ that everyone else can enjoy the improvement. For anyone who want to contribute,
 please download JSONlab source code from it's subversion repository by using the
 following command:
 
- svn co https://iso2mesh.svn.sourceforge.net/svnroot/iso2mesh/trunk/jsonlab jsonlab
+ svn checkout svn://svn.code.sf.net/p/iso2mesh/code/trunk/jsonlab jsonlab
 
 You can make changes to the files as needed. Once you are satisfied with your
 changes, and ready to share it with others, please cd the root directory of 
diff --git a/loadjson.m b/loadjson.m
index 2dfcd27f257c2df39591cc2e3ae1aaf736637d50..32d40efd42121fdd92bc401b48ba8d8ebbf6a22d 100644
--- a/loadjson.m
+++ b/loadjson.m
@@ -398,6 +398,13 @@ function val = parse_value(varargin)
             return;
         case '{'
             val = parse_object(varargin{:});
+            if isstruct(val)
+                if(~isempty(strmatch('x0x5F_ArrayType_',fieldnames(val), 'exact')))
+                    val=jstruct2array(val);
+                end
+            elseif isempty(val)
+                val = struct;
+            end
             return;
         case {'-','0','1','2','3','4','5','6','7','8','9'}
             val = parse_number(varargin{:});
diff --git a/loadubjson.m b/loadubjson.m
index 10ee2b4056d707e037e36efe1fe7c4fbed25a486..b92384be83b919be3ed46427f3e490bd76336fd9 100644
--- a/loadubjson.m
+++ b/loadubjson.m
@@ -376,6 +376,13 @@ function val = parse_value(varargin)
             return;
         case '{'
             val = parse_object(varargin{:});
+            if isstruct(val)
+                if(~isempty(strmatch('x0x5F_ArrayType_',fieldnames(val), 'exact')))
+                    val=jstruct2array(val);
+                end
+            elseif isempty(val)
+                val = struct;
+            end
             return;
         case {'i','U','I','l','L','d','D'}
             val = parse_number(varargin{:});
diff --git a/savejson.m b/savejson.m
index 31632723e032a99954b306753a40265ee0275d9f..9c7fe86bf8c1f7fc9d6ec1942c5a0b3310b80a07 100644
--- a/savejson.m
+++ b/savejson.m
@@ -157,9 +157,9 @@ if(len>1)
     end
 elseif(len==0)
     if(~isempty(name))
-        txt=sprintf('%s"%s": null',padding0, checkname(name,varargin{:})); name=''; 
+        txt=sprintf('%s"%s": []',padding0, checkname(name,varargin{:})); name=''; 
     else
-        txt=sprintf('%snull',padding0); 
+        txt=sprintf('%s[]',padding0); 
     end
 end
 for i=1:len