Moved the skip secondary index search hint closer to the predicates.
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java
index 3ed2783..68f231e 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java
@@ -19,5 +19,4 @@
     public static final String PUSHED_FIELD_ACCESS = "PUSHED_FIELD_ACCESS";
     public static final String PUSHED_RUNNABLE_FIELD_ACCESS = "PUSHED_RUNNABLE_FIELD_ACCESS";
     public static final String FIELD_TYPE = "FIELD_TYPE";
-    public static final String SKIP_SECONDARY_INDEX_SEARCH_HINT = "SKIP_SECONDARY_INDEX_SEARCH_HINT";
-}
+}
\ No newline at end of file
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java
index 5bd9dfc..7a15c32 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java
@@ -28,6 +28,7 @@
 import org.apache.commons.lang3.mutable.MutableObject;
 
 import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.common.annotations.SkipSecondaryIndexSearchExpressionAnnotation;
 import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
 import edu.uci.ics.asterix.metadata.entities.Dataset;
 import edu.uci.ics.asterix.metadata.entities.Index;
@@ -579,6 +580,11 @@
                 return false;
             }
         }
+        if (!index.isPrimaryIndex()
+                && optFuncExpr.getFuncExpr().getAnnotations()
+                        .containsKey(SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE)) {
+            return false;
+        }
         // No additional analysis required for BTrees.
         return true;
     }
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
index effbaff..47efeb0 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
@@ -20,7 +20,6 @@
 
 import org.apache.commons.lang3.mutable.Mutable;
 
-import edu.uci.ics.asterix.algebra.base.AsterixOperatorAnnotations;
 import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
 import edu.uci.ics.asterix.metadata.entities.Index;
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -104,12 +103,7 @@
 
         // Choose index to be applied.
         Pair<IAccessMethod, Index> chosenIndex = chooseIndex(analyzedAMs);
-        if (chosenIndex != null && chosenIndex.second.isPrimaryIndex()) {
-            System.out.println();
-        }
-        if (chosenIndex == null
-                || (select.getAnnotations().containsKey(AsterixOperatorAnnotations.SKIP_SECONDARY_INDEX_SEARCH_HINT) && !chosenIndex.second
-                        .isPrimaryIndex())) {
+        if (chosenIndex == null) {
             context.addToDontApplySet(this, select);
             return false;
         }
@@ -137,7 +131,6 @@
         // Set and analyze select.
         selectRef = opRef;
         select = (SelectOperator) op1;
-
         // Check that the select's condition is a function call.
         ILogicalExpression condExpr = select.getCondition().getValue();
         if (condExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
@@ -157,4 +150,4 @@
         select = null;
         selectCond = null;
     }
-}
+}
\ No newline at end of file
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
index fb8becc..6636d07 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
@@ -25,6 +25,7 @@
 
 import edu.uci.ics.asterix.algebra.base.LogicalOperatorDeepCopyVisitor;
 import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.common.annotations.SkipSecondaryIndexSearchExpressionAnnotation;
 import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
 import edu.uci.ics.asterix.formats.nontagged.AqlBinaryTokenizerFactoryProvider;
 import edu.uci.ics.asterix.metadata.entities.Dataset;
@@ -766,6 +767,10 @@
 
     @Override
     public boolean exprIsOptimizable(Index index, IOptimizableFuncExpr optFuncExpr) {
+        if (optFuncExpr.getFuncExpr().getAnnotations()
+                .containsKey(SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE)) {
+            return false;
+        }
         if (optFuncExpr.getFuncExpr().getFunctionIdentifier() == AsterixBuiltinFunctions.EDIT_DISTANCE_CHECK) {
             // Must be for a join query.
             if (optFuncExpr.getNumConstantVals() == 1) {
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java
index b8125aa..c714aa9 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java
@@ -21,6 +21,7 @@
 import org.apache.commons.lang3.mutable.MutableObject;
 
 import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.common.annotations.SkipSecondaryIndexSearchExpressionAnnotation;
 import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
 import edu.uci.ics.asterix.metadata.entities.Dataset;
 import edu.uci.ics.asterix.metadata.entities.Index;
@@ -204,6 +205,10 @@
 
     @Override
     public boolean exprIsOptimizable(Index index, IOptimizableFuncExpr optFuncExpr) {
+        if (optFuncExpr.getFuncExpr().getAnnotations()
+                .containsKey(SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE)) {
+            return false;
+        }
         // No additional analysis required.
         return true;
     }
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
index 9ac5558..4e82d1c 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
@@ -23,7 +23,6 @@
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.mutable.MutableObject;
 
-import edu.uci.ics.asterix.algebra.base.AsterixOperatorAnnotations;
 import edu.uci.ics.asterix.aql.base.Clause;
 import edu.uci.ics.asterix.aql.base.Expression;
 import edu.uci.ics.asterix.aql.base.Expression.Kind;
@@ -927,9 +926,6 @@
         SelectOperator s = new SelectOperator(new MutableObject<ILogicalExpression>(p.first));
         s.getInputs().add(p.second);
 
-        if (w.hasSkipSecondaryIndexSearchHint()) {
-            s.getAnnotations().put(AsterixOperatorAnnotations.SKIP_SECONDARY_INDEX_SEARCH_HINT, true);
-        }
         return new Pair<ILogicalOperator, LogicalVariable>(s, null);
     }
 
@@ -1463,4 +1459,4 @@
         // TODO Auto-generated method stub
         return null;
     }
-}
+}
\ No newline at end of file
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java
index edd0d9b..e403cce 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java
@@ -423,17 +423,15 @@
         private Expression condition;
         private int varCounter;
         private AqlMetadataProvider metadataProvider;
-        private final boolean skipSecondaryIndexSearchHint;
 
         public CompiledDeleteStatement(VariableExpr var, String dataverseName, String datasetName,
-                Expression condition, int varCounter, boolean skipSecondaryIndexSearchHint, AqlMetadataProvider metadataProvider) {
+                Expression condition, int varCounter, AqlMetadataProvider metadataProvider) {
             this.var = var;
             this.dataverseName = dataverseName;
             this.datasetName = datasetName;
             this.condition = condition;
             this.varCounter = varCounter;
             this.metadataProvider = metadataProvider;
-            this.skipSecondaryIndexSearchHint = skipSecondaryIndexSearchHint;
         }
 
         @Override
@@ -453,10 +451,6 @@
         public Expression getCondition() {
             return condition;
         }
-        
-        public boolean hasSkipSecondaryIndexSearchHint() {
-            return skipSecondaryIndexSearchHint;
-        }
 
         public Query getQuery() throws AlgebricksException {
 
@@ -472,7 +466,7 @@
             clauseList.add(forClause);
             Clause whereClause = null;
             if (condition != null) {
-                whereClause = new WhereClause(condition, skipSecondaryIndexSearchHint);
+                whereClause = new WhereClause(condition);
                 clauseList.add(whereClause);
             }
 
@@ -562,4 +556,4 @@
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java b/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java
index 25395e5..8fb0baa 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java
@@ -1395,7 +1395,7 @@
             String dataverseName = getActiveDataverseName(stmtDelete.getDataverseName());
             CompiledDeleteStatement clfrqs = new CompiledDeleteStatement(stmtDelete.getVariableExpr(), dataverseName,
                     stmtDelete.getDatasetName().getValue(), stmtDelete.getCondition(), stmtDelete.getVarCounter(),
-                    stmtDelete.hasSkipSecondaryIndexSearchHint(), metadataProvider);
+                    metadataProvider);
             JobSpecification compiled = rewriteCompileQuery(metadataProvider, clfrqs.getQuery(), clfrqs);
 
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
@@ -1892,4 +1892,4 @@
             throw new IllegalStateException(rootE);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index-search-in-delete.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index-search-in-delete.aql
index 6d8435ef..1c6f069 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index-search-in-delete.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index-search-in-delete.aql
@@ -27,5 +27,5 @@
 
 create dataset Customers(CustomerType) primary key cid;
 
-delete $c from dataset Customers /*+ skip-index */ where $c.cid < 10;
+delete $c from dataset Customers where $c.cid /*+ skip-index */ < 10;
 
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index.aql
index 114784e..77f9e8e 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/dont-skip-primary-index.aql
@@ -19,6 +19,5 @@
 create dataset testdst(TestType) primary key fname,lname;
 
 for $emp in dataset('testdst') 
-/*+ skip-index */
-where $emp.fname >= "Craig" and $emp.lname >= "Kevin" and $emp.fname <= "Mary" and $emp.lname <= "Tomes"
+where $emp.fname /*+ skip-index */ >= "Craig" and $emp.lname /*+ skip-index */ >= "Kevin" and $emp.fname /*+ skip-index */ <= "Mary" and $emp.lname /*+ skip-index */ <= "Tomes"
 return $emp
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index-search-in-delete.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index-search-in-delete.aql
index de3b154..b8fc5ab 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index-search-in-delete.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index-search-in-delete.aql
@@ -21,4 +21,4 @@
 
 create index ngram_index on DBLP(title) type ngram(3);
 
-delete $o from dataset DBLP /*+ skip-index */ where contains($o.title, "Multimedia")
\ No newline at end of file
+delete $o from dataset DBLP where /*+ skip-index */ contains($o.title, "Multimedia")
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index.aql
index 8b80497..1ae5fe9 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-ngram-index.aql
@@ -23,7 +23,6 @@
 write output to nc1:"rttest/inverted-index-basic_ngram-contains.adm";
 
 for $o in dataset('DBLP')
-/*+ skip-index */
-where contains($o.title, "Multimedia")
+where /*+ skip-index */ contains($o.title, "Multimedia")
 order by $o.id
 return $o
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-index-search-in-delete.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-index-search-in-delete.aql
index 1c6b312..3403ef1 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-index-search-in-delete.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-index-search-in-delete.aql
@@ -26,4 +26,4 @@
 
 create index rtree_index_point on MyData(point) type rtree;
 
-delete $m from dataset MyData /*+ skip-index */ where spatial-intersect($m.point, create-polygon([0.0,1.0,0.0,4.0,12.0,4.0,12.0,1.0]));
+delete $m from dataset MyData where /*+ skip-index */ spatial-intersect($m.point, create-polygon([0.0,1.0,0.0,4.0,12.0,4.0,12.0,1.0]));
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-secondary-index.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-secondary-index.aql
index 55e78fc..52fb83d 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-secondary-index.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-rtree-secondary-index.aql
@@ -35,6 +35,5 @@
 write output to nc1:"rttest/index_rtree-secondary-index.adm";
 
 for $o in dataset('MyData')
-/*+ skip-index */
-where spatial-intersect($o.point, create-polygon([4.0,1.0,4.0,4.0,12.0,4.0,12.0,1.0]))
+where /*+ skip-index */ spatial-intersect($o.point, create-polygon([4.0,1.0,4.0,4.0,12.0,4.0,12.0,1.0]))
 return {"id":$o.id}
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index-search-in-delete.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index-search-in-delete.aql
index aee356f..a0096ff 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index-search-in-delete.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index-search-in-delete.aql
@@ -28,5 +28,5 @@
 
 create index age_index on Customers(age);
 
-delete $c from dataset Customers /*+ skip-index */ where $c.age < 20;
+delete $c from dataset Customers where $c.age /*+ skip-index */ < 20;
 
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index.aql
index 32a6b06..abf77c6 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-secondary-btree-index.aql
@@ -21,6 +21,5 @@
 create index sec_Idx on testdst(fname);
 
 for $emp in dataset('testdst') 
-/*+ skip-index */
-where $emp.fname >= "Max" and $emp.fname <= "Roger" 
+where $emp.fname /*+ skip-index */ >= "Max" and $emp.fname /*+ skip-index */ <= "Roger" 
 return $emp
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index-search-in-delete.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index-search-in-delete.aql
index a7620c9..53010a0 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index-search-in-delete.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index-search-in-delete.aql
@@ -22,4 +22,4 @@
 
 create index keyword_index on DBLP(title) type keyword;
 
-delete $o from dataset DBLP /*+ skip-index */ where similarity-jaccard(word-tokens($o.title), word-tokens("Transactions for Cooperative Environments")) >= 0.5f
\ No newline at end of file
+delete $o from dataset DBLP where /*+ skip-index */ similarity-jaccard(word-tokens($o.title), word-tokens("Transactions for Cooperative Environments")) >= 0.5f
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index.aql b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index.aql
index 2c95104..a9cdfbb 100644
--- a/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index.aql
+++ b/asterix-app/src/test/resources/optimizerts/queries/skip-index/skip-word-index.aql
@@ -24,6 +24,6 @@
 write output to nc1:"rttest/inverted-index-basic_word-jaccard.adm";
 
 for $o in dataset('DBLP')
-/*+ skip-index */
-where similarity-jaccard(word-tokens($o.title), word-tokens("Transactions for Cooperative Environments")) >= 0.5f
+let $jacc := /*+ skip-index */ similarity-jaccard(word-tokens($o.title), word-tokens("Transactions for Cooperative Environments"))
+where $jacc >= 0.5f
 return $o
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java
index 6698d16..ded6946 100644
--- a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java
@@ -27,16 +27,14 @@
     private Identifier datasetName;
     private Expression condition;
     private int varCounter;
-    private final boolean skipSecondaryIndexSearchHint;
 
     public DeleteStatement(VariableExpr vars, Identifier dataverseName, Identifier datasetName, Expression condition,
-            int varCounter, boolean skipSecondaryIndexSearchHint) {
+            int varCounter) {
         this.vars = vars;
         this.dataverseName = dataverseName;
         this.datasetName = datasetName;
         this.condition = condition;
         this.varCounter = varCounter;
-        this.skipSecondaryIndexSearchHint = skipSecondaryIndexSearchHint;
     }
 
     @Override
@@ -63,10 +61,6 @@
     public int getVarCounter() {
         return varCounter;
     }
-    
-    public boolean hasSkipSecondaryIndexSearchHint() {
-        return skipSecondaryIndexSearchHint;
-    }
 
     @Override
     public <R, T> R accept(IAqlExpressionVisitor<R, T> visitor, T arg) throws AsterixException {
@@ -78,4 +72,4 @@
         visitor.visit(this, arg);
     }
 
-}
+}
\ No newline at end of file
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java
index f136f34..3782624 100644
--- a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java
@@ -22,7 +22,6 @@
 
 public class WhereClause implements Clause {
     private Expression whereExpr;
-    private boolean skipSecondaryIndexSearchHint;
 
     public Expression getWhereExpr() {
         return whereExpr;
@@ -32,10 +31,9 @@
         this.whereExpr = whereExpr;
     }
 
-    public WhereClause(Expression whereExpr, boolean skipSecondaryIndexSearchHint) {
+    public WhereClause(Expression whereExpr) {
         super();
         this.whereExpr = whereExpr;
-        this.skipSecondaryIndexSearchHint = skipSecondaryIndexSearchHint;
     }
 
     public WhereClause() {
@@ -56,11 +54,4 @@
         visitor.visit(this, arg);
     }
 
-    public void setSkipSecondaryIndexSearchHint(boolean skipSecondaryIndexSearchHint) {
-        this.skipSecondaryIndexSearchHint = skipSecondaryIndexSearchHint;
-    }
-
-    public boolean hasSkipSecondaryIndexSearchHint() {
-        return skipSecondaryIndexSearchHint;
-    }
-}
+}
\ No newline at end of file
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java
index ab5905c..30a0ebb 100644
--- a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java
@@ -214,7 +214,7 @@
     public Pair<IAqlExpression, List<VariableSubstitution>> visitWhereClause(WhereClause wc,
             List<VariableSubstitution> arg) throws AsterixException {
         Pair<IAqlExpression, List<VariableSubstitution>> p1 = wc.getWhereExpr().accept(this, arg);
-        WhereClause newW = new WhereClause((Expression) p1.first, wc.hasSkipSecondaryIndexSearchHint());
+        WhereClause newW = new WhereClause((Expression) p1.first);
         return new Pair<IAqlExpression, List<VariableSubstitution>>(newW, p1.second);
     }
 
@@ -606,4 +606,4 @@
         // TODO Auto-generated method stub
         return null;
     }
-}
+}
\ No newline at end of file
diff --git a/asterix-aql/src/main/javacc/AQL.jj b/asterix-aql/src/main/javacc/AQL.jj
index 35f39f0..1044d2e 100644
--- a/asterix-aql/src/main/javacc/AQL.jj
+++ b/asterix-aql/src/main/javacc/AQL.jj
@@ -696,24 +696,17 @@
   VariableExpr var = null;
   Expression condition = null;
   Pair<Identifier, Identifier> nameComponents;
-  boolean skipSecondaryIndexSearchHint = false;
-  Clause c = null; 
 }
 {
   "delete" var = Variable()
     {
       getCurrentScope().addNewVarSymbolToScope(var.getVar());
     }
-  "from" <DATASET> nameComponents = QualifiedName() 
-  (c = WhereClause())?
-  {
-    if (c != null) {
-      WhereClause wc = (WhereClause) c;
-      condition = wc.getWhereExpr();
-      skipSecondaryIndexSearchHint = wc.hasSkipSecondaryIndexSearchHint();
+  "from" <DATASET> nameComponents  = QualifiedName() 
+  (<WHERE> condition = Expression())?
+    {
+      return new DeleteStatement(var, nameComponents.first, nameComponents.second, condition, getVarCounter());
     }
-    return new DeleteStatement(var, nameComponents.first, nameComponents.second, condition, getVarCounter(), skipSecondaryIndexSearchHint);
-  }
 }
 
 UpdateStatement UpdateStatement() throws ParseException:
@@ -1328,8 +1321,12 @@
       LOOKAHEAD(2)( <LT> | <GT> | <LE> | <GE> | <EQ> | <NE> |<SIMILAR>)
   	  {
   	    String mhint = getHint(token);
-  	    if (mhint != null && mhint.equals(INDEXED_NESTED_LOOP_JOIN_HINT)) {
-          annotation = IndexedNLJoinExpressionAnnotation.INSTANCE;
+  	    if (mhint != null) {
+  	      if (mhint.equals(INDEXED_NESTED_LOOP_JOIN_HINT)) {
+            annotation = IndexedNLJoinExpressionAnnotation.INSTANCE;
+          } else if (mhint.equals(SKIP_SECONDARY_INDEX_SEARCH_HINT)) {
+            annotation = SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE;
+          }
         }
   	    if (op == null) {
   	      op = new OperatorExpr();
@@ -1780,8 +1777,12 @@
         signature = new FunctionSignature(funcName.dataverse, fqFunctionName, arity);
       }
       callExpr = new CallExpr(signature,argList);
-      if (hint != null && hint.startsWith(INDEXED_NESTED_LOOP_JOIN_HINT)) {
-        callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
+      if (hint != null) {
+        if (hint.startsWith(INDEXED_NESTED_LOOP_JOIN_HINT)) {
+          callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
+        } else if (hint.startsWith(SKIP_SECONDARY_INDEX_SEARCH_HINT)) {
+          callExpr.addHint(SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE);
+        }
       }
       return callExpr;
     }
@@ -1933,14 +1934,7 @@
   Expression whereExpr;
 }
 {
-    <WHERE> 
-    {
-      String hint = getHint(token);
-      if (hint != null && hint.equals(SKIP_SECONDARY_INDEX_SEARCH_HINT)) {
-        wc.setSkipSecondaryIndexSearchHint(true);   
-      } 
-    }
-    whereExpr = Expression()
+    <WHERE> whereExpr = Expression()
     {
       wc.setWhereExpr(whereExpr);
       return wc;
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/SkipSecondaryIndexSearchExpressionAnnotation.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/SkipSecondaryIndexSearchExpressionAnnotation.java
new file mode 100644
index 0000000..46190e7
--- /dev/null
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/SkipSecondaryIndexSearchExpressionAnnotation.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.asterix.common.annotations;
+
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
+
+public class SkipSecondaryIndexSearchExpressionAnnotation implements IExpressionAnnotation {
+
+    public static final String SKIP_SECONDARY_INDEX_SEARCH_ANNOTATION_KEY = "skip-index";
+    public static final SkipSecondaryIndexSearchExpressionAnnotation INSTANCE = new SkipSecondaryIndexSearchExpressionAnnotation();
+
+    private Object object;
+
+    @Override
+    public Object getObject() {
+        return object;
+    }
+
+    @Override
+    public void setObject(Object object) {
+        this.object = object;
+    }
+
+    @Override
+    public IExpressionAnnotation copy() {
+        SkipSecondaryIndexSearchExpressionAnnotation clone = new SkipSecondaryIndexSearchExpressionAnnotation();
+        clone.setObject(object);
+        return clone;
+    }
+}