diff --git a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/GeneratedSentenceProcessor.java b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/GeneratedSentenceProcessor.java
index f47bde6..e1f6d77 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/GeneratedSentenceProcessor.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/GeneratedSentenceProcessor.java
@@ -84,10 +84,12 @@
         ||sentTry.indexOf( "mon-fri")>-1 ||sentTry.indexOf( "email us")>-1 ||sentTry.indexOf( "privacy pol")>-1 ||sentTry.indexOf( "back to top")>-1 
         ||sentTry.indexOf( "click here")>-1 ||sentTry.indexOf( "for details")>-1 ||sentTry.indexOf( "assistance?")>-1 ||sentTry.indexOf( "chat live")>-1
         ||sentTry.indexOf( "free shipping")>-1 ||sentTry.indexOf( "company info")>-1 ||sentTry.indexOf( "satisfaction g")>-1 ||sentTry.indexOf( "contact us")>-1
-        
         ||sentTry.startsWith( "fax") ||sentTry.startsWith( "write") || sentTry.startsWith( "email")||sentTry.indexOf( "conditions")>-1 ||sentTry.indexOf( "chat live")>-1
-        ||sentTry.indexOf( "free shipping")>-1 ||sentTry.indexOf( "company info")>-1 ||sentTry.indexOf( "satisfaction g")>-1 ||sentTry.indexOf( "contact us")>-1
-     
+        ||sentTry.startsWith( "we ") ||sentTry.indexOf( "the recipient")>-1 ||sentTry.indexOf( "day return")>-1 ||sentTry.indexOf( "days return")>-1
+        
+        ||sentTry.startsWith( "fax") ||sentTry.indexOf( "refund it")>-1 || sentTry.indexOf( "your money")>-1
+        ||sentTry.indexOf( "cond???")>-1 ||sentTry.indexOf( "purchase orders")>-1
+        ||sentTry.startsWith( "exchange it ") ||sentTry.indexOf( "return it")>-1 ||sentTry.indexOf( "day return")>-1 ||sentTry.indexOf( "days return")>-1
     )
       return null;
 
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/RelatedSentenceFinder.java b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/RelatedSentenceFinder.java
index 8f0cb67..7ff9fc3 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/RelatedSentenceFinder.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/RelatedSentenceFinder.java
@@ -69,7 +69,7 @@
   public List<HitBase> findRelatedOpinionsForSentenceFastAndDummy(String word,
       List<String> sents) throws Exception {
     BingWebQueryRunner yrunner = new BingWebQueryRunner();
-    List<HitBase> searchResult = yrunner.runSearch(word);
+    List<HitBase> searchResult = yrunner.runSearch(word, 100);
     return searchResult;
   }
 
@@ -83,7 +83,7 @@
     for (String query : nounPhraseQueries) {
       System.out.println("\nquery = " + query);
       // query += " "+join(MENTAL_VERBS, " OR ") ;
-      List<HitBase> searchResult = yrunner.runSearch(query);
+      List<HitBase> searchResult = yrunner.runSearch(query, 100);
       if (searchResult != null) {
         for (HitBase item : searchResult) { // got some text from .html
           if (item.getAbstractText() != null
@@ -123,7 +123,7 @@
     BingWebQueryRunner yrunner = new BingWebQueryRunner();
     for (String verbAddition : StoryDiscourseNavigator.frequentPerformingVerbs) {
       List<HitBase> searchResult = yrunner.runSearch(sentence + " "
-          + verbAddition);
+          + verbAddition, 100);
       if (searchResult != null) {
         for (HitBase item : searchResult) { // got some text from .html
           if (item.getAbstractText() != null
diff --git a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/SearchResultsProcessor.java b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/SearchResultsProcessor.java
index 53498e7..128bee2 100644
--- a/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/SearchResultsProcessor.java
+++ b/opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/SearchResultsProcessor.java
@@ -90,24 +90,17 @@
   }
   
   public List<HitBase> runSearchViaAPI(String query) {
-    BingResponse resp = null, // obtained from bing
-    newResp = null; // re-sorted based on similarity
+	List<HitBase> hits = null;
     try {
-      List<String> resultList = search(query, "", "", 30);
-      resp = populateBingHit(resultList.get(0));
+      List<HitBase> resultList = runSearch(query, 30);
       // now we apply our own relevance filter
-      newResp.setHits(calculateMatchScoreResortHits(resp.getHits(), query));
+      hits = calculateMatchScoreResortHits(resultList, query);
 
     } catch (Exception e) {
       // e.printStackTrace();
       LOG.info("No search results for query '" + query);
-      e.printStackTrace();
       return null;
     }
-    // cast to super class
-    List<HitBase> hits = new ArrayList<HitBase>();
-    for (HitBase h : resp.getHits())
-      hits.add((HitBase) h);
 
     hits = removeDuplicates(hits, 0.9);
 
