diff --git a/preprocessor b/preprocessor
index 81d4fd5d83c08da2403a8faf3d2a006d3ab4bb1e..ebd9954d33fbeba970dc3ebb249a03c15b317141 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 81d4fd5d83c08da2403a8faf3d2a006d3ab4bb1e
+Subproject commit ebd9954d33fbeba970dc3ebb249a03c15b317141
diff --git a/tests/occbin/filter/NKM.mod b/tests/occbin/filter/NKM.mod
index 112e73a76b993c90389225d3128cd944ddcbb530..cdf257f017fd3a5edea5af0ae8048b443dade6fe 100644
--- a/tests/occbin/filter/NKM.mod
+++ b/tests/occbin/filter/NKM.mod
@@ -77,9 +77,6 @@ parameters
     phiy        // Output responsiveness
     nu          // Investment adjustment cost
     sigups      // Utilization    
-        
-    // Switching parameters
-    zlb 
  ;
 
 
@@ -108,7 +105,6 @@ sigs     = 0.005;     // Standard deviation
 sigi     = 0.002;      // Standard deviation
 phipi    = 2.0;       // Inflation responsiveness
 phiy     = 0.5;       // Output responsiveness
-zlb      = 0 ;         // ZLB dummy
 inomlb   = 1 ;         // Inom LB  
         
 // ---------------- Model -----------------------------------------------//               
@@ -179,8 +175,10 @@ model;
     [name = 'Notional Interest Rate (9)']
     inomnot = inomnot(-1)^rhoi*(inombar*pigap^phipi*yg^phiy)^(1-rhoi)*exp(mp);    
     
-    [name = 'Nominal Interest Rate (10)']
-    inom = (inomnot*(1-zlb)+zlb*inomlb);   
+    [name = 'Nominal Interest Rate (10)', bind='zlb']
+    inom = inomlb;
+    [name = 'Nominal Interest Rate (10)', relax='zlb']
+    inom = inomnot;
                   
     [name = 'Inverse MUC (11)']
     lam = c-h*c(-1)/g;
diff --git a/tests/occbin/filter/NKM_0_std_shocks.mod b/tests/occbin/filter/NKM_0_std_shocks.mod
index c45e4c8e966def819d327aec82467d03c22157b1..4a592c84d48a2f56423f0d4ee32cecc25945d07b 100644
--- a/tests/occbin/filter/NKM_0_std_shocks.mod
+++ b/tests/occbin/filter/NKM_0_std_shocks.mod
@@ -79,9 +79,6 @@ parameters
     phiy        // Output responsiveness
     nu          // Investment adjustment cost
     sigups      // Utilization    
-        
-    // Switching parameters
-    zlb 
  ;
 
 
@@ -110,7 +107,6 @@ sigs     = 0.005;     // Standard deviation
 sigi     = 0.002;      // Standard deviation
 phipi    = 2.0;       // Inflation responsiveness
 phiy     = 0.5;       // Output responsiveness
-zlb      = 0 ;         // ZLB dummy
 inomlb   = 1 ;         // Inom LB  
         
 // ---------------- Model -----------------------------------------------//               
@@ -181,8 +177,10 @@ model;
     [name = 'Notional Interest Rate (9)']
     inomnot = inomnot(-1)^rhoi*(inombar*pigap^phipi*yg^phiy)^(1-rhoi)*exp(mp);    
     
-    [name = 'Nominal Interest Rate (10)']
-    inom = (inomnot*(1-zlb)+zlb*inomlb);   
+    [name = 'Nominal Interest Rate (10)', bind='zlb']
+    inom = inomlb;
+    [name = 'Nominal Interest Rate (10)', relax='zlb']
+    inom = inomnot;
                   
     [name = 'Inverse MUC (11)']
     lam = c-h*c(-1)/g;
diff --git a/tests/occbin/model_borrcon/borrcon.mod b/tests/occbin/model_borrcon/borrcon.mod
index fae3420967797a4360d1b849cb6531fc7e24d676..78661e16fb63b99c5ea0c1e3d12cfdf8156be530 100644
--- a/tests/occbin/model_borrcon/borrcon.mod
+++ b/tests/occbin/model_borrcon/borrcon.mod
@@ -12,12 +12,15 @@ var b ${b}$ (long_name='borrowing')
     ;
 varexo u $u$;
 
-parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$, relax_borrcon  ;
+parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$;
 
 model;
 ec = c(1);
 c = y + b - R*b(-1) ;
-(1-relax_borrcon)*(b - M*y) +  relax_borrcon*lb = 0;
+[name = 'borrowing', bind='borrcon']
+lb = 0;
+[name = 'borrowing', relax='borrcon']
+b = M*y;  
 lb = 1/c^GAMMAC - BETA*R/c(+1)^GAMMAC ;
 log(y) = RHO*log(y(-1)) + u ;
 c_hat = log(c) - log(steady_state(c));
@@ -26,8 +29,8 @@ y_hat = log(y) - log(steady_state(y));
 end;
 
 occbin_constraints;
- name 'relax_borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y);
-%name 'relax_borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y;
+ name 'borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y);
+%name 'borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y;
 end;
     
 steady_state_model;
@@ -44,7 +47,6 @@ RHO   = 0.9;
 SIGMA = 0.05;
 M = 1;
 GAMMAC = 1;
-relax_borrcon = 0;
 
 shocks;
 var u; stderr SIGMA;
diff --git a/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod b/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod
index c0e3b2ee486567fdad292dc053f82d00b870e7dc..b79a18d6b0c4ba858e962d0cedc3cb274b9bb5cc 100644
--- a/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod
+++ b/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod
@@ -13,12 +13,15 @@ var b ${b}$ (long_name='borrowing')
 
 varexo junk1 u junk2 ;
 
-parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$, relax_borrcon  ;
+parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$;
 
 model;
 ec = c(1);
 c = y + b - R*b(-1) ;
-(1-relax_borrcon)*(b - M*y) +  relax_borrcon*lb = 0;
+[name = 'borrowing', bind='borrcon']
+lb = 0;
+[name = 'borrowing', relax='borrcon']
+b = M*y;  
 lb = 1/c^GAMMAC - BETA*R/c(+1)^GAMMAC +junk1 + junk2;
 log(y) = RHO*log(y(-1)) + u ;
 c_hat = log(c) - log(steady_state(c));
@@ -27,7 +30,7 @@ y_hat = log(y) - log(steady_state(y));
 end;
 
 occbin_constraints;
-name 'relax_borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y);
+name 'borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y);
 end;
 
 steady_state_model;
@@ -44,7 +47,6 @@ RHO   = 0.9;
 SIGMA = 0.05;
 M = 1;
 GAMMAC = 1;
-relax_borrcon = 0;
 
 shocks;
 var u; stderr SIGMA;
diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod b/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod
index 0249f337ef42238689b688c23b70e16af98ec834..1d2397ab5425254571fad1b4dea5b5351a64c107 100644
--- a/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod
+++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod
@@ -8,7 +8,7 @@ varexo erra;
 
 
 // parameters
-parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG, INEG, IRR;
+parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI;
 
 model;
 
@@ -20,20 +20,33 @@ model;
 
 /////////////////////////////////////////////////////////////////
 // 1.
--exp(c)^(-GAMMAC)*(1+2*INEG*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1)))
-+ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*INEG*PSI*(exp(k(1))/exp(k)-1)*
+[name='Euler', bind = 'INEG'] 
+-exp(c)^(-GAMMAC)*(1+2*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1)))
++ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*PSI*(exp(k(1))/exp(k)-1)*
   (-exp(k(1))/exp(k)^2)+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= 
   -lambdak+BETA*(1-DELTAK)*lambdak(1);
 
+[name='Euler', relax = 'INEG']
+-exp(c)^(-GAMMAC) + BETA*exp(c(1))^(-GAMMAC)*(1-DELTAK+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= 
+  -lambdak+BETA*(1-DELTAK)*lambdak(1);
+
 // 2.
-exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+
-INEG*PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA);
+[name='Budget constraint',bind = 'INEG'] 
+exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA);
+
+[name='Budget constraint',relax = 'INEG']
+exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))=exp(a)*exp(k(-1))^(ALPHA);
 
 // 3.
 exp(i) = exp(k)-(1-DELTAK)*exp(k(-1));
 
 // 4.
-lambdak*(1-IRR) + IRR*(i - log(PHI*ziss)) = 0;
+[name='investment',bind='IRR,INEG']
+(i - log(PHI*ziss)) = 0;
+[name='investment',relax='IRR']
+lambdak=0;
+[name='investment',bind='IRR',relax='INEG']
+(i - log(PHI*ziss)) = 0;
 
 // 5. 
 a = RHOA*a(-1)+erra;
diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod b/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod
index 6e68912674ab1a529f63e27864b2279ad69f6664..5d850eddfb70fd85639928bf61cca898685733dd 100644
--- a/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod
+++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod
@@ -8,7 +8,7 @@ varexo junk1 erra junk2;
 
 
 // parameters
-parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG, INEG, IRR;
+parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI;
 
 model;
 
@@ -20,20 +20,33 @@ model;
 
 /////////////////////////////////////////////////////////////////
 // 1.
--exp(c)^(-GAMMAC)*(1+2*INEG*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1)))
-+ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*INEG*PSI*(exp(k(1))/exp(k)-1)*
+[name='Euler', bind = 'INEG'] 
+-exp(c)^(-GAMMAC)*(1+2*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1)))
++ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*PSI*(exp(k(1))/exp(k)-1)*
   (-exp(k(1))/exp(k)^2)+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= 
   -lambdak+BETA*(1-DELTAK)*lambdak(1);
 
+[name='Euler', relax = 'INEG']
+-exp(c)^(-GAMMAC) + BETA*exp(c(1))^(-GAMMAC)*(1-DELTAK+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= 
+  -lambdak+BETA*(1-DELTAK)*lambdak(1);
+
 // 2.
-exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+
-INEG*PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA) + junk1 + junk2;
+[name='Budget constraint',bind = 'INEG'] 
+exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA) + junk1 + junk2;
+
+[name='Budget constraint',relax = 'INEG']
+exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))=exp(a)*exp(k(-1))^(ALPHA) + junk1 + junk2;
 
 // 3.
 exp(i) = exp(k)-(1-DELTAK)*exp(k(-1));
 
 // 4.
-lambdak*(1-IRR) + IRR*(i - log(PHI*ziss)) = 0;
+[name='investment',bind='IRR,INEG']
+(i - log(PHI*ziss)) = 0;
+[name='investment',relax='IRR']
+lambdak=0;
+[name='investment',bind='IRR',relax='INEG']
+(i - log(PHI*ziss)) = 0;
 
 // 5. 
 a = RHOA*a(-1)+erra;
@@ -61,4 +74,4 @@ end
 
 if max(max(abs(oo_.Smoother.SteadyState-orig_results.oo_.Smoother.SteadyState)))>1e-10
      error('SmoothedShocks do not match')
-end
\ No newline at end of file
+end
diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc b/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc
index 41fb6b6d9115eb56eedcfdedf0235cd30276bde7..3379aebe5f8fafc1b191e593f03d2af75417d873 100644
--- a/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc
+++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc
@@ -18,8 +18,6 @@ GAMMAC=2;
 RHOA = 0.9;
 PHI = 0.975;
 PSI = 5;        % adjustment cost for capital if investment is negative
-INEG = 0;
-IRR = 0;
 
 shocks;
   var erra; stderr 0.015;
diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod b/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod
index 484b3831cab1750c87caab4414813ad477a41a05..4d4fbb1f087bfdb20c1fe5ee908523c8a992d602 100644
--- a/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod
+++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod
@@ -7,9 +7,9 @@ varexo erra;
 
 
 // parameters
-parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG, INEG, IRR;
+parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG;
 
-model(occbin);
+model;
 
 # zkss = ((1/BETA-1+DELTAK)/ALPHA)^(1/(ALPHA-1));
 # zcss = -DELTAK*zkss + zkss^ALPHA;
@@ -19,28 +19,33 @@ model(occbin);
 
 /////////////////////////////////////////////////////////////////
 // 1.
--exp(c)^(-GAMMAC)*(1+2*INEG*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1)))
-+ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*INEG*PSI*(exp(k(1))/exp(k)-1)*
+[name='Euler', bind = 'INEG'] 
+-exp(c)^(-GAMMAC)*(1+2*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1)))
++ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*PSI*(exp(k(1))/exp(k)-1)*
   (-exp(k(1))/exp(k)^2)+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= 
   -lambdak+BETA*(1-DELTAK)*lambdak(1);
 
+[name='Euler', relax = 'INEG']
+-exp(c)^(-GAMMAC) + BETA*exp(c(1))^(-GAMMAC)*(1-DELTAK+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= 
+  -lambdak+BETA*(1-DELTAK)*lambdak(1);
+
 // 2.
-exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+
-INEG*PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA);
+[name='Budget constraint',bind = 'INEG'] 
+exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA);
+
+[name='Budget constraint',relax = 'INEG']
+exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))=exp(a)*exp(k(-1))^(ALPHA);
 
 // 3.
-[pswitch = 'INEG', 
-//         bind = 'exp(i+i_ss)<-0.000001', 
-//         relax = 'exp(i+i_ss)>-0.000001' ]
-        bind = 'i<-b', 
-        relax = 'i>-0.000001' ]
 exp(i) = exp(k)-(1-DELTAK)*exp(k(-1));
 
 // 4.
-[pswitch = 'IRR', 
-        bind = 'i<PHI-1', 
-        relax = 'lambdak<0' ]
-lambdak*(1-IRR) + IRR*(i - log(PHI*ziss)) = 0;
+[name='investment',bind='IRR,INEG']
+(i - log(PHI*ziss)) = 0;
+[name='investment',relax='IRR']
+lambdak=0;
+[name='investment',bind='IRR',relax='INEG']
+(i - log(PHI*ziss)) = 0;
 
 // 5. 
 a = RHOA*a(-1)+erra;
@@ -48,6 +53,11 @@ a = RHOA*a(-1)+erra;
 
 end;
 
+occbin_constraints;
+name 'IRR'; bind i<PHI-1; relax lambdak<0;
+name 'INEG'; bind i<-b; relax i>-0.000001; // Failure here because b does not exist
+end;
+
 steady_state_model;
 kss = ((1/BETA-1+DELTAK)/ALPHA)^(1/(ALPHA-1));
 css = -DELTAK*kss +kss^ALPHA;
@@ -68,8 +78,6 @@ GAMMAC=2;
 RHOA = 0.9;
 PHI = 0.975;
 PSI = 5;        % adjustment cost for capital if investment is negative
-INEG = 0;
-IRR = 0;
 
 shocks;
   var erra; stderr 0.015;