diff --git a/analyze.py b/analyze.py
index 4811155ef54d4ebaf18db544b0f8e2ca35b94d16_YW5hbHl6ZS5weQ==..5d6eb24cd8d2c59a676ac13bf96e6762fdf3cbe7_YW5hbHl6ZS5weQ== 100644
--- a/analyze.py
+++ b/analyze.py
@@ -112,6 +112,13 @@
 _EQ = 2
 _EQV = 3
 
+OPSYM={
+    _AND:"and",
+    _OR:"or",
+    _EQ:"eq",
+    _EQV:"eqv"
+}
+
 class GecodeCSPProblem(object):
     """Builds an internal representation of the constraint
     that will be passed to the rql_solve module which implements
@@ -139,6 +146,6 @@
         self.values = {}        # maps val name -> val index
         self.all_values = set() # this gets turned into a list later
         self.idx_domains = []   # maps var index -> list of val index
-
+        self.ivalues = {}       # only used for debugging
 
     def debug(self):
@@ -143,3 +150,6 @@
 
     def debug(self):
+        self.ivalues = {}
+        for val_name, val_num in self.values.items():
+            self.ivalues[val_num] = val_name
         print "Domains:", self.domains
@@ -145,5 +155,5 @@
         print "Domains:", self.domains
-        print "Ops:", self.op
+        print "Ops:", self.pretty_print_ops(self.op)
         print "Variables:", self.variables
         print "Values:", self.values
 
@@ -147,5 +157,20 @@
         print "Variables:", self.variables
         print "Values:", self.values
 
+
+    def pretty_print_ops(self, ops):
+        if ops[0] in (_AND, _OR):
+            res = [ OPSYM[ops[0]], '(' ]
+            for op in ops[1:]:
+                res.append(self.pretty_print_ops(op))
+                res.append(',')
+            res.append( ')' )
+            return "".join(res)
+        elif ops[0] == _EQ:
+            return "%s==%s" % (self.ivariables[ops[1]], self.ivalues[ops[2]])
+        elif ops[0] == _EQV:
+            res = [ self.ivariables[k] for k in ops[1:] ]
+            return '~='.join(res)
+
     def get_output(self):
         return ""
@@ -150,5 +175,6 @@
     def get_output(self):
         return ""
+
     def solve(self):
         constraints = self.op
 
@@ -240,6 +266,8 @@
 else:
     CSPProblem = GecodeCSPProblem
 
+#CSPProblem = ConstraintCSPProblem
+
 
 class ETypeResolver(object):
     """Resolve variables types according to the schema.
diff --git a/gecode_solver.cpp b/gecode_solver.cpp
index 4811155ef54d4ebaf18db544b0f8e2ca35b94d16_Z2Vjb2RlX3NvbHZlci5jcHA=..5d6eb24cd8d2c59a676ac13bf96e6762fdf3cbe7_Z2Vjb2RlX3NvbHZlci5jcHA= 100644
--- a/gecode_solver.cpp
+++ b/gecode_solver.cpp
@@ -6,6 +6,13 @@
 #include "gecode/int.hh"
 #include "gecode/search.hh"
 
+#if 1
+#define debug(fmt,...)
+#else
+#define debug(fmt,...) printf(fmt, ##__VA_ARGS__)
+#endif
+
+
 #define PM_VERSION(a,b,c) ((a<<16)+(b<<8)+(c))
 // There is no easy way to test for gecode version here
 // so the build system must pass GE_VERSION accordingly
@@ -95,7 +102,7 @@
     RqlContext(long nvars, PyObject* domains,
 	       long nvalues, PyObject* constraints, PyObject* sols):
 	solutions(-1), // return every solutions
-	time(1000),    // time limit in case the problem is too big
+	time(-1),    // time limit in case the problem is too big
 	fails(-1),     // ?? used by GecodeStop ...
 	nvars(nvars),  // Number of variables
 	nvalues(nvalues), // Number of values
@@ -263,6 +270,11 @@
 	
 	variable = get_uint( desc, 1 );
 	value = get_uint( desc, 2 );
+	if (variable==1) {
+	    debug("RQL:%ld == %ld ***\n", variable, value);
+	} else {
+	    debug("RQL:%ld == %ld\n", variable, value);
+	}
 	rel(SELF, variables[variable], IRT_EQ, value, expr_value);
     }
 
@@ -280,5 +292,6 @@
 	int len = PyList_Size(desc);
 	int var0 = get_uint( desc, 1 );
 	BoolVarArray terms(SELF, len-2,0,1);
+	debug("RQL:EQV(%d",var0);
 	for (int i=1;i<len-1;++i) {
 	    int var1 = get_uint(desc, i+1);
@@ -283,4 +296,5 @@
 	for (int i=1;i<len-1;++i) {
 	    int var1 = get_uint(desc, i+1);
+	    debug(",%d",var1);
 	    rel(SELF, variables[var0], IRT_EQ, variables[var1], terms[i-1] );
 	}
@@ -285,5 +299,6 @@
 	    rel(SELF, variables[var0], IRT_EQ, variables[var1], terms[i-1] );
 	}
+	debug(")\n");
 	rel(SELF, BOT_AND, terms, expr_value);
     }
 
@@ -292,7 +307,8 @@
 	int len = PyList_Size(desc);
 	BoolVarArray terms(SELF, len-1,0,1);
 
+	debug("RQL:AND(\n");
 	for(int i=0;i<len-1;++i) {
 	    PyObject* expr = PyList_GetItem(desc, i+1);
 	    add_constraints( expr, terms[i] );
 	}
@@ -295,7 +311,8 @@
 	for(int i=0;i<len-1;++i) {
 	    PyObject* expr = PyList_GetItem(desc, i+1);
 	    add_constraints( expr, terms[i] );
 	}
+	debug("RQL:)\n");
 	rel(SELF, BOT_AND, terms, var);
     }
 
@@ -304,7 +321,8 @@
 	int len = PyList_Size(desc);
 	BoolVarArray terms(SELF, len-1,0,1);
 
+	debug("RQL:OR(\n");
 	for(int i=0;i<len-1;++i) {
 	    PyObject* expr = PyList_GetItem(desc, i+1);
 	    add_constraints( expr, terms[i] );
 	}
@@ -307,7 +325,8 @@
 	for(int i=0;i<len-1;++i) {
 	    PyObject* expr = PyList_GetItem(desc, i+1);
 	    add_constraints( expr, terms[i] );
 	}
+	debug("RQL:)\n");
 	rel(SELF, BOT_OR, terms, var);
     }
 
@@ -340,7 +359,7 @@
 
 	    delete ex;
 	    t0 = t0 + t.stop();
-	} while (--i != 0 && t0 < pb.time);
+	} while (--i != 0 && (pb.time<0 || t0 < pb.time));
 	Search::Statistics stat = e.statistics();
 	if (pb.verbosity) {
 	    cout << endl;