diff --git a/matlab/DsgeVarLikelihood.m b/matlab/DsgeVarLikelihood.m
index a096f2984eadcb985780ccab5ef57ba16d3d28c2..2b02bb4ce4a9177e056a35c459dfdb4ccd192d36 100644
--- a/matlab/DsgeVarLikelihood.m
+++ b/matlab/DsgeVarLikelihood.m
@@ -34,6 +34,9 @@ ns = nvx+nvn+ncx+ncn;
 NumberOfObservedVariables = size(options_.varobs,1);
 NumberOfLags = options_.varlag;
 NumberOfParameters = NumberOfObservedVariables*NumberOfLags ;
+if ~options_.noconstant
+    NumberOfParameters = NumberOfParameters + 1;
+end
 
 mYY = evalin('base', 'mYY');
 mYX = evalin('base', 'mYX');
@@ -108,8 +111,7 @@ if ~options_.noconstant
         constant = transpose(log(SteadyState(bayestopt_.mfys)));
     else
         constant = transpose(SteadyState(bayestopt_.mfys));
-    end
-    NumberOfParameters = NumberOfParameters + 1;	
+    end	
 else
     constant = zeros(1,NumberOfObservedVariables);
 end
@@ -153,7 +155,7 @@ for i = 1:NumberOfLags-1
 end
 if ~options_.noconstant
     % Add one row and one column to GXX
-    GXX = [GXX , ones(NumberOfLags*NumberOfObservedVariables,1) ; ones(1,NumberOfParameters)];
+    GXX = [GXX , kron(ones(NumberOfLags,1),constant') ; [  kron(ones(1,NumberOfLags),constant) , 1] ];
 end
 
 GYY = TheoreticalAutoCovarianceOfTheObservedVariables(:,:,1);
diff --git a/matlab/PosteriorIRF.m b/matlab/PosteriorIRF.m
index 6635682a6a6b6582b52577effb14663a3baf12a1..d2bae51ebab0a46f1509cd8e4426297c3d0e7867 100644
--- a/matlab/PosteriorIRF.m
+++ b/matlab/PosteriorIRF.m
@@ -123,6 +123,11 @@ if MAX_nirfs_dsgevar
         var_sample_moments(options_.first_obs,options_.first_obs+options_.nobs-1,options_.varlag,-1);
     NumberOfLags = options_.varlag;
     NumberOfLagsTimesNvobs = NumberOfLags*nvobs;
+    if options_.noconstant
+        NumberOfParametersPerEquation = NumberOfLagsTimesNvobs;
+    else
+        NumberOfParametersPerEquation = NumberOfLagsTimesNvobs+1;
+    end
     Companion_matrix = diag(ones(nvobs*(NumberOfLags-1),1),-nvobs);
 end
 b = 0;
@@ -175,7 +180,7 @@ while b<=B
     end
     if MAX_nirfs_dsgevar
         IRUN = IRUN+1;
-        tmp_dsgevar = zeros(options_.irf,nvobs*M_.exo_nbr);
+        %tmp_dsgevar = zeros(options_.irf,nvobs*M_.exo_nbr);
         [fval,cost_flag,info,PHI,SIGMAu,iXX] =  DsgeVarLikelihood(deep',gend);
         dsge_prior_weight = M_.params(strmatch('dsge_prior_weight',M_.param_names));
         DSGE_PRIOR_WEIGHT = floor(gend*(1+dsge_prior_weight));
@@ -183,15 +188,25 @@ while b<=B
         explosive_var  = 1;
         while explosive_var
             % draw from the marginal posterior of SIGMA
-            SIGMAu_draw = rand_inverse_wishart(nvobs, DSGE_PRIOR_WEIGHT-NumberOfLagsTimesNvobs, ...
+            SIGMAu_draw = rand_inverse_wishart(nvobs, DSGE_PRIOR_WEIGHT-NumberOfParametersPerEquation, ...
                                                SIGMA_inv_upper_chol);
             % draw from the conditional posterior of PHI
-            PHI_draw = rand_matrix_normal(NumberOfLagsTimesNvobs,nvobs, PHI, ...
+            PHI_draw = rand_matrix_normal(NumberOfParametersPerEquation,nvobs, PHI, ...
                                            chol(SIGMAu_draw)', chol(iXX)');
-            Companion_matrix(1:nvobs,:) = transpose(PHI_draw);
+            Companion_matrix(1:nvobs,:) = transpose(PHI_draw(1:NumberOfLagsTimesNvobs,:));
             % Check for stationarity
             explosive_var = any(abs(eig(Companion_matrix))>1.000000001);
         end
+        % Get the mean 
+% $$$         if options_.noconstant
+            mu = zeros(1,nvobs); 
+% $$$         else
+% $$$             AA = eye(nvobs);
+% $$$             for lag=1:NumberOfLags
+% $$$                 AA = AA-PHI_draw((lag-1)*nvobs+1:lag*nvobs,:);
+% $$$             end
+% $$$             mu = transpose(AA\transpose(PHI_draw(end,:)));
+% $$$         end
         % Get rotation
         if dsge_prior_weight > 0
             Atheta(oo_.dr.order_var,M_.exo_names_orig_ord) = oo_.dr.ghu*sqrt(M_.Sigma_e);
@@ -207,8 +222,9 @@ while b<=B
         for t = 2:options_.irf
             PHIpower = Companion_matrix*PHIpower;
             tmp3 = PHIpower(1:nvobs,1:nvobs)*SIGMAtrOMEGA;
-            irfs(t,:)  = tmp3(:)';
-        end            
+            irfs(t,:)  = tmp3(:)'+kron(ones(1,M_.exo_nbr),mu);
+        end
+        tmp_dsgevar = kron(ones(options_.irf,1),mu);
         for j = 1:(nvobs*M_.exo_nbr)
             if max(irfs(:,j)) - min(irfs(:,j)) > 1e-10 
                 tmp_dsgevar(:,j) = (irfs(:,j));