diff --git a/@Viewer/Viewer.m b/@Viewer/Viewer.m
index 485b4888de5a0ce9b3351288b9f90b8950925215..7f2b41d651e58d91a2a96e2f055f8896796fd970 100644
--- a/@Viewer/Viewer.m
+++ b/@Viewer/Viewer.m
@@ -21,7 +21,6 @@ classdef Viewer < handle
     end
     
     properties(Hidden)
-        validDims = {'xy','uv','ux','vy','yx','vu','xu','yv'};
         validRanges = {'class','slice','data'};
         climClass
         climData
@@ -35,7 +34,7 @@ classdef Viewer < handle
             p = inputParser; p.StructExpand = true; p.KeepUnmatched = true;
             
             p.addRequired('data');
-            p.addParameter('dims' , obj.dims  ,@(dims) any(strcmpi(dims,obj.validDims)));
+            p.addParameter('dims' , obj.dims  ,@ischar);
             p.addParameter('name' , obj.name  ,@ischar);
             p.addParameter('range', obj.range ,@(range) any(strcmpi(range,obj.validRanges)));
             p.addParameter('cv'   , obj.cv    ,@isnumeric);
@@ -109,24 +108,13 @@ classdef Viewer < handle
         end
         
         function updatePerm(obj)
-            switch lower(obj.dims)
-                case 'xu'
-                    obj.perm = [1,4,3,2,5];
-                case 'ux'
-                    obj.perm = [4,1,3,2,5];
-                case 'yv'
-                    obj.perm = [2,5,3,1,4];
-                case 'vy'
-                    obj.perm = [5,2,3,1,4];
-                case 'xy'
-                    obj.perm = [1,2,3,4,5];
-                case 'yx'
-                    obj.perm = [2,1,3,4,5];
-                case 'uv'
-                    obj.perm = [4,5,3,1,2];
-                case 'vu'
-                    obj.perm = [5,4,3,1,2];
-            end
+            dims_ = [obj.dims,setdiff('uxvy',obj.dims,'stable')];
+            [~,perm_] = sort(dims_,'ascend');
+            perm_ = perm_([3,4,1,2]);
+            perm_(perm_) = 1:4;
+            perm_(perm_>2) = perm_(perm_>2)+1;
+            perm_ = [perm_(1:2),3,perm_(3:4)];
+            obj.perm = perm_;
         end
         
         function updateName(obj)
@@ -185,12 +173,9 @@ classdef Viewer < handle
         end
         
         function updateTitle(obj)
-            coordVec = false(1,5);
-            coordVec(obj.perm(4:5)) = true;
             
-            coordStr = {'x','y','c','u','v'};
-            coordStr(coordVec) = arrayfun(@num2str,obj.cv,'UniformOutput',false);
-            coordStr(~coordVec) = deal({':'});
+            coordStr = {':',':',':',':',':'};
+            coordStr(obj.perm(4:5)) = arrayfun(@num2str,obj.cv,'UniformOutput',false);
             coordStr = ['(' strjoin(coordStr,','),')'];
             
             obj.title = [obj.name,' ',coordStr];