diff --git a/matlab/@dprior/subsref.m b/matlab/@dprior/subsref.m
index b4f2915ed86150c6c8cdee0199d478a41c21b744..be49924f8f7e50a2849366f10cad125ead096df1 100644
--- a/matlab/@dprior/subsref.m
+++ b/matlab/@dprior/subsref.m
@@ -2,7 +2,7 @@ function p = subsref(o, S)
 
 % Overload subsref method.
 
-% Copyright © 2023-2024 Dynare Team
+% Copyright © 2023-2025 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -22,7 +22,39 @@ function p = subsref(o, S)
 switch S(1).type
   case '.'
     if ismember(S(1).subs, {'p1','p2','p3','p4','p5','p6','p7','lb','ub','trunc'})
-        p = builtin('subsref', o, S(1));
+        varargout{1} = builtin('subsref', o, S(1));
+        if length(S)>1 && strcmp(S(1).type, '()') && ~strcmp(S(1).subs, 'trunc')
+            S = shiftS(S,1);
+            if ~isempty(S)
+                varargout{1} = subsref(varargout{1}, S);
+            end
+        end
+    elseif strcmp(S(1).subs, 'isshape') && length(S)>1 && strcmp(S(2).type, '()') && length(S(2).subs)==2
+        if ischar(S(2).subs{1})
+            if ~isnumeric(S(2).subs{2}) || ~isscalar(S(2).subs{2}) || ~(abs(round(S(2).subs{2})-S(2).subs{2})<eps(1))
+                derror('dprior:wrongInputArguments', sprintf('Second input argument must be an integer scalar between 1 and %u', o.length()))
+            end
+            switch S(2).subs{1}
+              case 'uniform'
+                varargout{1} = ismember(S(2).subs{2}, o.iduniform);
+              case 'gaussian'
+                varargout{1} = ismember(S(2).subs{2}, o.idgaussian);
+              case 'gamma'
+                varargout{1} = ismember(S(2).subs{2}, o.idgamma);
+              case 'beta'
+                varargout{1} = ismember(S(2).subs{2}, o.idbeta);
+              case 'invgamma1'
+                varargout{1} = ismember(S(2).subs{2}, o.idinvgamma1);
+              case 'invgamma2'
+                varargout{1} = ismember(S(2).subs{2}, o.idinvgamma2);
+              case 'weibull'
+                varargout{1} = ismember(S(2).subs{2}, o.idweibull);
+              otherwise
+                derror('dprior:wrongInputArguments', sprintf('Unknown prior shape (%s).', S(2).subs{1}))
+            end
+        else
+            derror('dprior:wrongInputArguments', 'First input argument to ishape must be the name of a distribution (row char array).')
+        end
     elseif isequal(S(1).subs, 'bounds') && length(S)==1
         p = bounds(o, [], false);
     elseif ismember(S(1).subs, {'deviate','length','isempty'})