diff --git a/matlab/prior_bounds.m b/matlab/prior_bounds.m
index 732bd71a9745cba03674b90762d8108d433e34dd..fff06b3267ba57fb7d314ea7cd40c3268c829b5b 100644
--- a/matlab/prior_bounds.m
+++ b/matlab/prior_bounds.m
@@ -11,7 +11,7 @@ function bounds = prior_bounds(bayestopt)
 % SPECIAL REQUIREMENTS
 %    none
 
-% Copyright (C) 2003-2008 Dynare Team
+% Copyright (C) 2003-2009 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -36,6 +36,8 @@ p1 = bayestopt.p1;
 p2 = bayestopt.p2;
 p3 = bayestopt.p3;
 p4 = bayestopt.p4;
+prior_trunc = options_.prior_trunc;
+
 
 n = length(pmean);
 bounds = zeros(n,2);
@@ -43,29 +45,61 @@ bounds = zeros(n,2);
 for i=1:n
   switch pshape(i)
     case 1
-      mu = (pmean(i)-p3(i))/(p4(i)-p3(i));
-      stdd = p2(i)/(p4(i)-p3(i));
-      A = (1-mu)*mu^2/stdd^2 - mu;
-      B = A*(1/mu - 1);
-      bounds(i,1) = betainv(options_.prior_trunc,A,B)*(p4(i)-p3(i))+p3(i);
-      bounds(i,2) = betainv(1-options_.prior_trunc,A,B)*(p4(i)-p3(i))+p3(i);
+      if prior_trunc == 0
+          bounds(i,1) = p3(i);
+          bounds(i,2) = p4(i);
+      else
+          mu = (pmean(i)-p3(i))/(p4(i)-p3(i));
+          stdd = p2(i)/(p4(i)-p3(i));
+          A = (1-mu)*mu^2/stdd^2 - mu;
+          B = A*(1/mu - 1);
+          bounds(i,1) = betainv(options_.prior_trunc,A,B)*(p4(i)-p3(i))+p3(i);
+          bounds(i,2) = betainv(1-options_.prior_trunc,A,B)*(p4(i)- ...
+                                                            p3(i))+p3(i);
+      end
     case 2
-      b = p2(i)^2/(pmean(i)-p3(i));
-      a = (pmean(i)-p3(i))/b;
-      bounds(i,1) = gaminv(options_.prior_trunc,a,b)+p3(i);
-      bounds(i,2) = gaminv(1-options_.prior_trunc,a,b)+p3(i);
+      if prior_trunc == 0
+          bounds(i,1) = p3(i);
+          bounds(i,2) = Inf;
+      else
+          b = p2(i)^2/(pmean(i)-p3(i));
+          a = (pmean(i)-p3(i))/b;
+          bounds(i,1) = gaminv(options_.prior_trunc,a,b)+p3(i);
+          bounds(i,2) = gaminv(1-options_.prior_trunc,a,b)+p3(i);
+      end
     case 3
-      bounds(i,1) = norminv(options_.prior_trunc,pmean(i),p2(i));
-      bounds(i,2) = norminv(1-options_.prior_trunc,pmean(i),p2(i));
+      if prior_trunc == 0
+          bounds(i,1) = -Inf;
+          bounds(i,2) = Inf;
+      else
+          bounds(i,1) = norminv(options_.prior_trunc,pmean(i),p2(i));
+          bounds(i,2) = norminv(1-options_.prior_trunc,pmean(i),p2(i));
+      end
     case 4
-      bounds(i,1) = 1/sqrt(gaminv(1-options_.prior_trunc, p2(i)/2, 2/p1(i)));
-      bounds(i,2) = 1/sqrt(gaminv(options_.prior_trunc, p2(i)/2, 2/p1(i)));
+      if prior_trunc == 0
+          bounds(i,1) = 0;
+          bounds(i,2) = Inf;
+      else
+          bounds(i,1) = 1/sqrt(gaminv(1-options_.prior_trunc, p2(i)/2, 2/p1(i)));
+          bounds(i,2) = 1/sqrt(gaminv(options_.prior_trunc, p2(i)/2, ...
+                                      2/p1(i)));
+      end
     case 5
-      bounds(i,1) = p1(i);
-      bounds(i,2) = p2(i);
+      if prior_trunc == 0
+          bounds(i,1) = p1(i);
+          bounds(i,2) = p2(i);
+      else
+          bounds(i,1) = p1(i)+(p2(i)-p1(i))*prior_trunc;
+          bounds(i,2) = p2(i)-(p2(i)-p1(i))*prior_trunc;
+      end
     case 6
-      bounds(i,1) = 1/gaminv(1-options_.prior_trunc, p2(i)/2, 2/p1(i));
-      bounds(i,2) = 1/gaminv(options_.prior_trunc, p2(i)/2, 2/p1(i));
+      if prior_trunc == 0
+          bounds(1) = 0;
+          bounds(2) = Inf;
+      else
+          bounds(i,1) = 1/gaminv(1-options_.prior_trunc, p2(i)/2, 2/p1(i));
+          bounds(i,2) = 1/gaminv(options_.prior_trunc, p2(i)/2, 2/p1(i));
+      end
     otherwise
       error(sprintf('prior_bounds: unknown distribution shape (index %d, type %d)', i, pshape(i)));
   end