diff --git a/tests/Makefile.am b/tests/Makefile.am
index a639bf838e210b6c2acb3c2836423441af178184..0eea42d1a165d3f9cd3a3185940112127c02e1b6 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -41,6 +41,7 @@ MODFILES = \
 	optimal_policy/Ramsey/ramsey_ex.mod \
 	optimal_policy/Ramsey/ramsey_ex_initval_AR2.mod \
 	optimal_policy/Ramsey/ramsey_ex_aux.mod \
+	optimal_policy/Ramsey/Gali_commitment.mod \
 	optimal_policy/RamseyConstraints/test1.mod \
 	discretionary_policy/dennis_1.mod \
 	initval_file/ramst_initval_file.mod \
diff --git a/tests/optimal_policy/Ramsey/Gali_commitment.mod b/tests/optimal_policy/Ramsey/Gali_commitment.mod
new file mode 100644
index 0000000000000000000000000000000000000000..029b2b33c059252318c05db944d1b365151c68db
--- /dev/null
+++ b/tests/optimal_policy/Ramsey/Gali_commitment.mod
@@ -0,0 +1,197 @@
+/*
+ * This file implements the optimal monetary policy under commitment exercise 
+ * in Jordi Gal� (2008): Monetary Policy, Inflation, and the Business Cycle, 
+ * Princeton University Press, Chapter 5.1.2
+ *
+ * It demonstrates how to use the ramsey_policy command of Dynare.
+ *
+ * Notes:
+ *      - all model variables are expressed in deviations from steady state, i.e. 
+ *        in contrast to to the chapter, both the nominal interest rate and 
+ *        natural output are not in log-levels, but rather mean 0
+ *
+ * This implementation was written by Johannes Pfeifer. In case you spot mistakes,
+ * email me at jpfeifer@gmx.de
+ *
+ * Please note that the following copyright notice only applies to this Dynare 
+ * implementation of the model.
+ */
+
+/*
+ * Copyright (C) 2015 Johannes Pfeifer
+ *
+ * This is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * It is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * For a copy of the GNU General Public License,
+ * see <http://www.gnu.org/licenses/>.
+ */
+
+
+var pi ${\pi}$ (long_name='inflation')
+    y_gap ${tilde y}$ (long_name='output gap')
+    y_nat ${y^{nat}}$ (long_name='natural output')
+    y ${y}$ (long_name='output')
+    r_e  ${r^{e}}$ (long_name='efficient interest rate')
+    y_e  ${y^{nat}}$ (long_name='efficient output') 
+    x ${x}$ (long_name='welfare-relevant output gap')
+    r_nat ${r^{nat}}$ (long_name='natural interest rate')
+    r_real ${r^r}$ (long_name='real interest rate')     
+    i ${i}$ (long_name='nominal interest rate')
+    n ${n}$ (long_name='hours worked')
+    m_growth_ann ${\Delta m}$ (long_name='money growth')
+    u ${u}$ (long_name='AR(1) cost push shock process')
+    a  ${a}$ (long_name='AR(1) technology shock process')
+    r_real_ann ${r^{r,ann}}$ (long_name='annualized real interest rate')
+    i_ann ${i^{ann}}$ (long_name='annualized nominal interest rate')
+    r_nat_ann ${r^{nat,ann}}$ (long_name='annualized natural interest rate')
+    pi_ann ${\pi^{ann}}$ (long_name='annualized inflation rate')
+    p ${p}$ (long_name='price level')
+    ;     
+
+varexo eps_a ${\varepsilon_a}$   (long_name='technology shock')
+       eps_u ${\varepsilon_u}$   (long_name='monetary policy shock');
+
+parameters alppha ${\alppha}$ (long_name='capital share')
+    betta ${\beta}$ (long_name='discount factor')
+    rho_a ${\rho_a}$ (long_name='autocorrelation technology shock')
+    rho_u ${\rho_{u}}$ (long_name='autocorrelation cost push shock')
+    siggma ${\sigma}$ (long_name='log utility')
+    phi ${\phi}$ (long_name='unitary Frisch elasticity')
+    phi_y ${\phi_{y}}$ (long_name='output feedback Taylor Rule')
+    eta ${\eta}$ (long_name='semi-elasticity of money demand')
+    epsilon ${\epsilon}$ (long_name='demand elasticity')
+    theta ${\theta}$ (long_name='Calvo parameter')
+    ;
+%----------------------------------------------------------------
+% Parametrization, p. 52
+%----------------------------------------------------------------
+siggma = 1;
+phi=1;
+phi_y  = .5/4;
+theta=2/3;
+rho_u = 0;
+rho_a  = 0.9;
+betta = 0.99;
+eta  =4;
+alppha=1/3;
+epsilon=6;
+
+
+
+%----------------------------------------------------------------
+% First Order Conditions
+%----------------------------------------------------------------
+
+model(linear); 
+//Composite parameters
+#Omega=(1-alppha)/(1-alppha+alppha*epsilon);  //defined on page 47
+#psi_n_ya=(1+phi)/(siggma*(1-alppha)+phi+alppha); //defined on page 48
+#lambda=(1-theta)*(1-betta*theta)/theta*Omega; //defined on page 47
+#kappa=lambda*(siggma+(phi+alppha)/(1-alppha));  //defined on page 49
+#alpha_x=kappa/epsilon; //defined on page 96
+#phi_pi=(1-rho_u)*kappa*siggma/(alpha_x)+rho_u; //defined on page 101
+
+//1. Definition efficient interest rate, below equation (4)
+r_e=siggma*(y_e(+1)-y_e);
+
+//2. Definition efficient output
+y_e=psi_n_ya*a;
+
+//3. Definition linking various output gaps, bottom page 96
+y_gap=x+(y_e-y_nat);
+
+//4. New Keynesian Phillips Curve eq. (2)
+pi=betta*pi(+1)+kappa*x + u;
+
+//5. Dynamic IS Curve eq. (4)
+x=-1/siggma*(i-pi(+1)-r_e)+x(+1);
+
+//6. Definition natural rate of interest eq. (23)
+r_nat=siggma*psi_n_ya*(a(+1)-a);
+
+//7. Definition real interest rate
+r_real=i-pi(+1);
+
+//8. Natural output
+y_nat=phi*a;
+
+//9. Definition output gap
+y_gap=y-y_nat;
+
+//10. cost push shock, equation (3)
+u=rho_u*u(-1)+eps_u;
+
+//11. TFP shock
+a=rho_a*a(-1)+eps_a;
+
+//12. Production function (eq. 13)
+y=a+(1-alppha)*n;
+
+//13. Money growth (derived from eq. (4))
+m_growth_ann=4*(y-y(-1)-eta*(i-i(-1))+pi);
+
+//14. Annualized nominal interest rate
+i_ann=4*i;
+
+//15. Annualized real interest rate
+r_real_ann=4*r_real;
+
+//16. Annualized natural interest rate
+r_nat_ann=4*r_nat;
+
+//17. Annualized inflation
+pi_ann=4*pi;
+
+//18. Definition price level
+pi=p-p(-1);
+
+//19. Interest Rate Rule that implements optimal solution, eq. (10)
+% i=r_e+phi_pi*pi;
+end;
+
+%----------------------------------------------------------------
+%  define shock variances
+%---------------------------------------------------------------
+
+shocks;
+var eps_u = 1;
+end;
+
+//planner objective using alpha_x expressed as function of deep parameters
+planner_objective pi^2 +(((1-theta)*(1-betta*theta)/theta*((1-alppha)/(1-alppha+alppha*epsilon)))*(siggma+(phi+alppha)/(1-alppha)))/epsilon*y_gap^2;
+
+ramsey_policy(instruments=(i),irf=13,planner_discount=betta) x pi p u;
+
+verbatim;
+%% Check correctness
+Omega=(1-alppha)/(1-alppha+alppha*epsilon);  %defined on page 47
+lambda=(1-theta)*(1-betta*theta)/theta*Omega; %defined on page 47
+kappa=lambda*(siggma+(phi+alppha)/(1-alppha));  %defined on page 49
+alpha_x=kappa/epsilon; %defined on page 96
+Psi=1/(kappa^2+alpha_x*(1-betta*rho_u)); %defined on page 99
+Psi_i=Psi*(kappa*siggma*(1-rho_u)+alpha_x*rho_u); %defined on page 101
+phi_pi=(1-rho_u)*kappa*siggma/(alpha_x)+rho_u; %defined on page 101
+a_parameter=alpha_x/(alpha_x*(1+betta)+kappa^2);
+delta = (1-sqrt(1-4*betta*a_parameter^2))/(2*a_parameter*betta);
+
+p_irf(1)=delta/(1-delta*betta*rho_u);
+x_irf(1)=-kappa*delta/(alpha_x*(1-betta*delta*rho_u));
+u_irf(1)=1;
+for ii=2:options_.irf
+    u_irf(ii)=rho_u*u_irf(ii-1);
+    p_irf(ii)=delta*p_irf(ii-1)+delta/(1-delta*betta*rho_u)*u_irf(ii);
+    x_irf(ii)=delta*x_irf(ii-1)-kappa*delta/(alpha_x*(1-betta*delta*rho_u))*u_irf(ii);
+end
+pi_irf=diff([0 p_irf]);
+
+if max(abs(u_irf-oo_.irfs.u_eps_u))>1e-10 || max(abs(p_irf-oo_.irfs.p_eps_u))>1e-10 || max(abs(p_irf-oo_.irfs.p_eps_u))>1e-10 || max(abs(x_irf-oo_.irfs.x_eps_u))>1e-10
+    error('IRFs do not match theoretical ones')
+end