diff --git a/lib/rufus/decision/hashes.rb b/lib/rufus/decision/hashes.rb
index <HASH>..<HASH> 100644
--- a/lib/rufus/decision/hashes.rb
+++ b/lib/rufus/decision/hashes.rb
@@ -203,11 +203,18 @@ module Decision
   #
   def self.check_and_eval(ruby_code, bndng=binding())
 
-    TREECHECKER.check(ruby_code)
-
+    begin
+      TREECHECKER.check(ruby_code)
+    rescue
+      raise $!, "Error parsing #{ruby_code} -> #{$!}", $!.backtrace
+    end
     # OK, green for eval...
 
-    eval(ruby_code, bndng)
+    begin
+      eval(ruby_code, bndng)
+    rescue
+      raise $!, "Error evaling #{ruby_code} -> #{$!}", $!.backtrace
+    end
   end
 end
 end
diff --git a/lib/rufus/decision/table.rb b/lib/rufus/decision/table.rb
index <HASH>..<HASH> 100644
--- a/lib/rufus/decision/table.rb
+++ b/lib/rufus/decision/table.rb
@@ -406,7 +406,11 @@ module Decision
 
         next if value == nil || value == ''
 
-        value = Rufus::dsub(value, hash)
+        begin
+          value = Rufus::dsub(value, hash)
+        rescue
+          raise $!, "Error substituting in #{value} -> #{$!}", $!.backtrace
+        end
 
         hash[out_header] = if @options[:accumulate]
           #
wrap some potential exception points for ruby_eval with more info