diff --git a/src/main/java/com/gitblit/service/LuceneService.java b/src/main/java/com/gitblit/service/LuceneService.java
index f22cb5a..9b97ad5 100644
--- a/src/main/java/com/gitblit/service/LuceneService.java
+++ b/src/main/java/com/gitblit/service/LuceneService.java
@@ -718,10 +718,9 @@
 		String pattern = MessageFormat.format("{0}:'{'0} AND {1}:\"'{'1'}'\" AND {2}:\"'{'2'}'\"", FIELD_OBJECT_TYPE, FIELD_BRANCH, FIELD_PATH);
 		String q = MessageFormat.format(pattern, SearchObjectType.blob.name(), branch, path);
 
-		BooleanQuery query = new BooleanQuery();
 		StandardAnalyzer analyzer = new StandardAnalyzer();
 		QueryParser qp = new QueryParser(FIELD_SUMMARY, analyzer);
-		query.add(qp.parse(q), Occur.MUST);
+		BooleanQuery query = new BooleanQuery.Builder().add(qp.parse(q), Occur.MUST).build();
 
 		IndexWriter writer = getIndexWriter(repositoryName);
 		int numDocsBefore = writer.numDocs();
@@ -1028,15 +1027,15 @@
 		StandardAnalyzer analyzer = new StandardAnalyzer();
 		try {
 			// default search checks summary and content
-			BooleanQuery query = new BooleanQuery();
+			BooleanQuery.Builder bldr = new BooleanQuery.Builder();
 			QueryParser qp;
 			qp = new QueryParser(FIELD_SUMMARY, analyzer);
 			qp.setAllowLeadingWildcard(true);
-			query.add(qp.parse(text), Occur.SHOULD);
+			bldr.add(qp.parse(text), Occur.SHOULD);
 
 			qp = new QueryParser(FIELD_CONTENT, analyzer);
 			qp.setAllowLeadingWildcard(true);
-			query.add(qp.parse(text), Occur.SHOULD);
+			bldr.add(qp.parse(text), Occur.SHOULD);
 
 			IndexSearcher searcher;
 			if (repositories.length == 1) {
@@ -1054,6 +1053,7 @@
 				searcher = new IndexSearcher(reader);
 			}
 
+			BooleanQuery query = bldr.build();
 			Query rewrittenQuery = searcher.rewrite(query);
 			logger.debug(rewrittenQuery.toString());
 
diff --git a/src/main/java/com/gitblit/tickets/TicketIndexer.java b/src/main/java/com/gitblit/tickets/TicketIndexer.java
index 652323a..b765cc6 100644
--- a/src/main/java/com/gitblit/tickets/TicketIndexer.java
+++ b/src/main/java/com/gitblit/tickets/TicketIndexer.java
@@ -200,8 +200,7 @@
 			IndexWriter writer = getWriter();
 			StandardAnalyzer analyzer = new StandardAnalyzer();
 			QueryParser qp = new QueryParser(Lucene.rid.name(), analyzer);
-			BooleanQuery query = new BooleanQuery();
-			query.add(qp.parse(repository.getRID()), Occur.MUST);
+			BooleanQuery query = new BooleanQuery.Builder().add(qp.parse(repository.getRID()), Occur.MUST).build();
 
 			int numDocsBefore = writer.numDocs();
 			writer.deleteDocuments(query);
@@ -286,8 +285,7 @@
 	private boolean delete(String repository, long ticketId, IndexWriter writer) throws Exception {
 		StandardAnalyzer analyzer = new StandardAnalyzer();
 		QueryParser qp = new QueryParser(Lucene.did.name(), analyzer);
-		BooleanQuery query = new BooleanQuery();
-		query.add(qp.parse(StringUtils.getSHA1(repository + ticketId)), Occur.MUST);
+		BooleanQuery query = new BooleanQuery.Builder().add(qp.parse(StringUtils.getSHA1(repository + ticketId)), Occur.MUST).build();
 
 		int numDocsBefore = writer.numDocs();
 		writer.deleteDocuments(query);
@@ -331,23 +329,23 @@
 		StandardAnalyzer analyzer = new StandardAnalyzer();
 		try {
 			// search the title, description and content
-			BooleanQuery query = new BooleanQuery();
+			BooleanQuery.Builder bldr = new BooleanQuery.Builder();
 			QueryParser qp;
 
 			qp = new QueryParser(Lucene.title.name(), analyzer);
 			qp.setAllowLeadingWildcard(true);
-			query.add(qp.parse(text), Occur.SHOULD);
+			bldr.add(qp.parse(text), Occur.SHOULD);
 
 			qp = new QueryParser(Lucene.body.name(), analyzer);
 			qp.setAllowLeadingWildcard(true);
-			query.add(qp.parse(text), Occur.SHOULD);
+			bldr.add(qp.parse(text), Occur.SHOULD);
 
 			qp = new QueryParser(Lucene.content.name(), analyzer);
 			qp.setAllowLeadingWildcard(true);
-			query.add(qp.parse(text), Occur.SHOULD);
+			bldr.add(qp.parse(text), Occur.SHOULD);
 
 			IndexSearcher searcher = getSearcher();
-			Query rewrittenQuery = searcher.rewrite(query);
+			Query rewrittenQuery = searcher.rewrite(bldr.build());
 
 			log.debug(rewrittenQuery.toString());
 
@@ -406,7 +404,7 @@
 				sort = new Sort(Lucene.fromString(sortBy).asSortField(desc));
 			}
 			int maxSize = 5000;
-			TopFieldDocs docs = searcher.search(rewrittenQuery, null, maxSize, sort, false, false);
+			TopFieldDocs docs = searcher.search(rewrittenQuery, maxSize, sort, false, false);
 			int size = (pageSize <= 0) ? maxSize : pageSize;
 			int offset = Math.max(0, (page - 1) * size);
 			ScoreDoc[] hits = subset(docs.scoreDocs, offset, size);
