Index: modules/join/src/test/org/apache/lucene/search/TestBlockJoin.java
===================================================================
--- modules/join/src/test/org/apache/lucene/search/TestBlockJoin.java	(revision 1179673)
+++ modules/join/src/test/org/apache/lucene/search/TestBlockJoin.java	(working copy)
@@ -122,6 +122,24 @@
     r.close();
     dir.close();
   }
+  
+  public void testBoostBug() throws Exception {
+    final Directory dir = newDirectory();
+    final RandomIndexWriter w = new RandomIndexWriter(random, dir);
+    IndexReader r = w.getReader();
+    w.close();
+    IndexSearcher s = newSearcher(r);
+    
+    BlockJoinQuery q = new BlockJoinQuery(new MatchAllDocsQuery(), new QueryWrapperFilter(new MatchAllDocsQuery()), BlockJoinQuery.ScoreMode.Avg);
+    s.search(q, 10);
+    BooleanQuery bq = new BooleanQuery();
+    bq.setBoost(2f); // we boost the BQ
+    bq.add(q, BooleanClause.Occur.MUST);
+    s.search(bq, 10);
+    s.close();
+    r.close();
+    dir.close();
+  }
 
   private String[][] getRandomFields(int maxUniqueValues) {
 
Index: modules/join/src/java/org/apache/lucene/search/join/BlockJoinQuery.java
===================================================================
--- modules/join/src/java/org/apache/lucene/search/join/BlockJoinQuery.java	(revision 1179673)
+++ modules/join/src/java/org/apache/lucene/search/join/BlockJoinQuery.java	(working copy)
@@ -138,12 +138,12 @@
 
     @Override
     public float getValueForNormalization() throws IOException {
-      return childWeight.getValueForNormalization();
+      return childWeight.getValueForNormalization() * joinQuery.getBoost() * joinQuery.getBoost();
     }
 
     @Override
     public void normalize(float norm, float topLevelBoost) {
-      childWeight.normalize(norm, topLevelBoost);
+      childWeight.normalize(norm, topLevelBoost * joinQuery.getBoost());
     }
 
     @Override
@@ -356,10 +356,12 @@
   public Query rewrite(IndexReader reader) throws IOException {
     final Query childRewrite = childQuery.rewrite(reader);
     if (childRewrite != childQuery) {
-      return new BlockJoinQuery(childQuery,
+      Query rewritten = new BlockJoinQuery(childQuery,
                                 childRewrite,
                                 parentsFilter,
                                 scoreMode);
+      rewritten.setBoost(getBoost());
+      return rewritten;
     } else {
       return this;
     }
@@ -371,16 +373,6 @@
   }
 
   @Override
-  public void setBoost(float boost) {
-    throw new UnsupportedOperationException("this query cannot support boosting; please use childQuery.setBoost instead");
-  }
-
-  @Override
-  public float getBoost() {
-    throw new UnsupportedOperationException("this query cannot support boosting; please use childQuery.getBoost instead");
-  }
-
-  @Override
   public boolean equals(Object _other) {
     if (_other instanceof BlockJoinQuery) {
       final BlockJoinQuery other = (BlockJoinQuery) _other;
