diff --git a/cp-demo/PaperExamples.scala b/cp-demo/PaperExamples.scala
index bde93b9f410d5817223576fc2b6fc702559a0c08..2afe523c5ed4c1b26e54e2ce0b0087a9b8404088 100644
--- a/cp-demo/PaperExamples.scala
+++ b/cp-demo/PaperExamples.scala
@@ -55,7 +55,8 @@ object PaperExamples extends App {
     problem.map(l => l.map(i => {
       val id = scala.math.abs(i)
       val isPos = i > 0
-      ((m : Map[Int,Boolean]) => m(id) == isPos).c
+      val c : Constraint1[Map[Int,Boolean]] = ((m : Map[Int,Boolean]) => m(id) == isPos)
+      c
     }).reduceLeft(_ || _)).reduceLeft(_ && _).find
   }
 
@@ -81,26 +82,50 @@ object PaperExamples extends App {
         assuming(m(l) >= 0 && m(l) <= 9) {
           println("OK for " + l)
         }
+        // we need this too because S and M occur as most significant digits
+        if (l == S() || l == M())
+          assuming(m(l) >= 1) {
+           println(l + " greater than 0  OK")
+         }
+
+        assuming( 
+                             1000 * m(S()) + 100 * m(E()) + 10 * m(N()) + m(D()) +
+                             1000 * m(M()) + 100 * m(O()) + 10 * m(R()) + m(E()) ==
+            10000 * m(M()) + 1000 * m(O()) + 100 * m(N()) + 10 * m(E()) + m(Y())) {
+          println("OK for sum")
+        }
+
+        assuming(distinct(m(S()), m(E()), m(N()), m(D()), m(M()), m(O()), m(R()), m(Y()))) {
+          println("OK for distinct")
+        }
 
       }
-      // simpler, crashes too:
-      //assuming(m(S()) >= 0 && m(S()) <= 9) {
-      //  println("OK for " + S())
-      //}
 
-      //println("A solution : " + m.value)
+      println("A solution : " + m.value)
 
       // functional-style, crashed because of if
-//      for(m <- ((m: Map[Letter,Int]) => 
-//        1000 * m(S()) + 100 * m(E()) + 10 * m(N()) + m(D()) +
-//        1000 * m(M()) + 100 * m(O()) + 10 * m(R()) + m(E()) ==
-//        10000 * m(M()) + 1000 * m(O()) + 100 * m(N()) + 10 * m(E()) + m(Y())).c.lazyFindAll if(
-//          m(S()) >= 0 && m(S()) <= 9)
-//        ){
-//        println(m)
-//      }
+      val c : Constraint1[Map[Letter,Int]] = ((m: Map[Letter,Int]) => 
+        1000 * m(S()) + 100 * m(E()) + 10 * m(N()) + m(D()) +
+        1000 * m(M()) + 100 * m(O()) + 10 * m(R()) + m(E()) ==
+        10000 * m(M()) + 1000 * m(O()) + 100 * m(N()) + 10 * m(E()) + m(Y()))
+
+      // this works too but I guess we should avoid enumerating maps
+      // for(m <- c.lazyFindAll if(
+      //     m(S()) >= 1 && m(S()) <= 9 &&
+      //     m(E()) >= 0 && m(E()) <= 9 &&
+      //     m(N()) >= 0 && m(N()) <= 9 &&
+      //     m(D()) >= 0 && m(D()) <= 9 &&
+      //     m(M()) >= 1 && m(M()) <= 9 &&
+      //     m(O()) >= 0 && m(O()) <= 9 &&
+      //     m(R()) >= 0 && m(R()) <= 9 &&
+      //     m(Y()) >= 0 && m(Y()) <= 9 &&
+      //     distinct(m(S()), m(E()), m(N()), m(D()), m(M()), m(O()), m(R()), m(Y()))
+      //   )){
+      //   println("###" + m.value)
+      //   }
     }
   }
 
+
   SendMoreMoney.run
 }