diff --git a/wccl-apps/wccl-rules.cpp b/wccl-apps/wccl-rules.cpp
index e7e18c94ca5f87d7800dbef8be2dfe6d29b32526..63d33c48f74fd11ef4c7782da3c4177acd16d4cd 100644
--- a/wccl-apps/wccl-rules.cpp
+++ b/wccl-apps/wccl-rules.cpp
@@ -50,7 +50,7 @@ public:
 		boost::shared_ptr<Corpus2::TokenWriter> writer);
 
 	bool empty() const {
-		return size() > 0;
+		return size() == 0;
 	}
 
 	size_t size() const {
@@ -128,14 +128,18 @@ void RuleRunner::apply_rules(boost::shared_ptr<Corpus2::TokenReader> reader,
 			}
 
 			foreach (boost::shared_ptr<Wccl::WcclFile>& f, parsed_files_) {
-				if (tag_rule_iterations_ == 0) {
-					f->get_tag_rules_ptr()->execute_once(as);
-				} else if (tag_rule_iterations_ < 0) {
-					f->get_tag_rules_ptr()->execute_until_done(as);
-				} else  {
-					f->get_tag_rules_ptr()->execute_until_done(as, tag_rule_iterations_);
+				if (f->has_tag_rules()) {
+					if (tag_rule_iterations_ == 0) {
+						f->get_tag_rules_ptr()->execute_once(as);
+					} else if (tag_rule_iterations_ < 0) {
+						f->get_tag_rules_ptr()->execute_until_done(as);
+					} else  {
+						f->get_tag_rules_ptr()->execute_until_done(as, tag_rule_iterations_);
+					}
+				}
+				if (f->has_match_rules()) {
+					f->get_match_rules_ptr()->apply_all(as);
 				}
-				f->get_match_rules_ptr()->apply_all(as);
 			}
 
 			timer.count_sentence(*as);
@@ -280,7 +284,7 @@ int main(int argc, char** argv)
 			}
 		}
 	} catch (PwrNlp::PwrNlpError& e) {
-		std::cerr << e.info() << std::endl;
+		std::cerr << e.scope() << "error: " << e.info() << std::endl;
 		return 2;
 	}