diff --git a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/inmemory/PartitionedInMemoryInvertedIndex.java b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/inmemory/PartitionedInMemoryInvertedIndex.java
index 53def29..13e9b5c 100644
--- a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/inmemory/PartitionedInMemoryInvertedIndex.java
+++ b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/inmemory/PartitionedInMemoryInvertedIndex.java
@@ -96,7 +96,7 @@
         maxPartitionIndex = this.maxPartitionIndex;
         partitionIndexLock.readLock().unlock();
 
-        if (minPartitionIndex == Short.MAX_VALUE || maxPartitionIndex == Short.MIN_VALUE) {
+        if (minPartitionIndex == Short.MAX_VALUE && maxPartitionIndex == Short.MIN_VALUE) {
             // Index must be empty.
             return;
         }
@@ -108,7 +108,7 @@
         if (numTokensUpperBound >= 0) {
             partitionEndIndex = (short) Math.min(maxPartitionIndex, numTokensUpperBound);
         }
-
+        
         PartitionedTOccurrenceSearcher partSearcher = (PartitionedTOccurrenceSearcher) searcher;
         PartitionedInMemoryInvertedIndexOpContext ctx = (PartitionedInMemoryInvertedIndexOpContext) ictx;
         ctx.setOperation(IndexOperation.SEARCH);
diff --git a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/InvertedListPartitions.java b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/InvertedListPartitions.java
index 2f720fb..1b060e5 100644
--- a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/InvertedListPartitions.java
+++ b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/InvertedListPartitions.java
@@ -30,8 +30,8 @@
     private final IObjectFactory<ArrayList<IInvertedListCursor>> arrayListFactory;
     private final ObjectCache<ArrayList<IInvertedListCursor>> arrayListCache;
     private ArrayList<IInvertedListCursor>[] partitions;
-    private int minValidPartitionIndex;
-    private int maxValidPartitionIndex;
+    private short minValidPartitionIndex;
+    private short maxValidPartitionIndex;
 
     public InvertedListPartitions() {
         this.arrayListFactory = new ArrayListFactory<IInvertedListCursor>();
@@ -56,11 +56,11 @@
             Arrays.fill(partitions, null);
         }
         arrayListCache.reset();
-        minValidPartitionIndex = Integer.MAX_VALUE;
-        maxValidPartitionIndex = Integer.MIN_VALUE;
+        minValidPartitionIndex = Short.MAX_VALUE;
+        maxValidPartitionIndex = Short.MIN_VALUE;
     }
 
-    public void addInvertedListCursor(IInvertedListCursor listCursor, int numTokens) {
+    public void addInvertedListCursor(IInvertedListCursor listCursor, short numTokens) {
         if (numTokens + 1 >= partitions.length) {
             partitions = Arrays.copyOf(partitions, numTokens + PARTITIONS_SLACK_SIZE);
         }
@@ -84,11 +84,11 @@
         return partitions;
     }
 
-    public int getMinValidPartitionIndex() {
+    public short getMinValidPartitionIndex() {
         return minValidPartitionIndex;
     }
 
-    public int getMaxValidPartitionIndex() {
+    public short getMaxValidPartitionIndex() {
         return maxValidPartitionIndex;
     }
 }
\ No newline at end of file
diff --git a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/PartitionedTOccurrenceSearcher.java b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/PartitionedTOccurrenceSearcher.java
index 6b482ba..fb8b9b0 100644
--- a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/PartitionedTOccurrenceSearcher.java
+++ b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/search/PartitionedTOccurrenceSearcher.java
@@ -103,8 +103,8 @@
 
         // Process the partitions one-by-one.
         ArrayList<IInvertedListCursor>[] partitionCursors = partitions.getPartitions();
-        int start = partitions.getMinValidPartitionIndex();
-        int end = partitions.getMaxValidPartitionIndex();
+        short start = partitions.getMinValidPartitionIndex();
+        short end = partitions.getMaxValidPartitionIndex();
         searchResult.reset();
         for (int i = start; i <= end; i++) {
             if (partitionCursors[i] == null) {
