diff --git a/@netcdf_native/private/read.m b/@netcdf_native/private/read.m
index 81e0990d42d4f42beb223a9376c1dc836a486475..f036511d78b5b45e79598765efcbf26db6e8a737 100644
--- a/@netcdf_native/private/read.m
+++ b/@netcdf_native/private/read.m
@@ -176,23 +176,39 @@ for id = 0:nvars-1
     end
   end
   
+%   % if var is char and as vertical alignment, transpose it
+%   % ------------------------------------------------------
+%   %         if xtype == self.NC_CHAR && (size(s.data__, 1) ~= 1)
+%   %           s.data__ = s.data__';
+%   %         end
+%   
+%   % add internal dimension__ member
+%   % Because MATLAB uses FORTRAN-style ordering, however, the order of
+%   % the dimension IDs is reversed relative to what would be obtained
+%   % from the C API
+%   % ----------------------------
+%   if length(dimids) > 1
+%     s.data__ = permute(s.data__, fliplr(1:length(dimids)));
+%     dimids = fliplr(dimids);
+%   end
+  
   % if var is char and as vertical alignment, transpose it
   % ------------------------------------------------------
-  %         if xtype == self.NC_CHAR && (size(s.data__, 1) ~= 1)
-  %           s.data__ = s.data__';
-  %         end
+  if xtype == self.NC_CHAR && (size(s.data__', 1) == 1)
+    s.data__ = s.data__';
   
-  % add internal dimension__ member
-  % Because MATLAB uses FORTRAN-style ordering, however, the order of
+  % Because MATLAB uses FORTRAN-style indexing, we need to transpose
+  % N-D array (k,i,j,...) to (i,j,k,...) however, the order of
   % the dimension IDs is reversed relative to what would be obtained
   % from the C API
-  % ----------------------------
-  if length(dimids) > 1
+  % If s.data__ is a vector, NetCDF API return vertical vector, 
+  % do nothing, it's OK
+  % -----------------------------------------------------------------
+  elseif length(dimids) > 1
     s.data__ = permute(s.data__, fliplr(1:length(dimids)));
     dimids = fliplr(dimids);
   end
   
-  
   for dimid = 1:numel(dimids)
     dimname = netcdf.inqDim(self.nc_id, dimids(dimid));