--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java
+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java
@@ -107,9 +107,9 @@
                 if (Math.pow((double)Math.abs(j) + 0.5D, 2.0D) + Math.pow((double)Math.abs(k) + 0.5D, 2.0D) <= (double)(p_180712_2_ * p_180712_2_))
                 {
                     BlockPos blockpos1 = p_180712_1_.func_177982_a(j, 0, k);
-                    Material material = this.field_175946_l.func_180495_p(blockpos1).func_177230_c().func_149688_o();
+                    net.minecraft.block.state.IBlockState state = this.field_175946_l.func_180495_p(blockpos1);
 
-                    if (material == Material.field_151579_a || material == Material.field_151584_j)
+                    if (state.func_177230_c().isAir(this.field_175946_l, blockpos1) || state.func_177230_c().isLeaves(this.field_175946_l, blockpos1))
                     {
                         this.func_175905_a(this.field_175946_l, blockpos1, p_180712_3_, 0);
                     }
@@ -268,7 +268,7 @@
             {
                 BlockPos blockpos3 = p_175936_1_.func_177963_a((double)(0.5F + (float)j * f), (double)(0.5F + (float)j * f1), (double)(0.5F + (float)j * f2));
 
-                if (!this.func_150523_a(this.field_175946_l.func_180495_p(blockpos3).func_177230_c()))
+                if (!this.isReplaceable(field_175946_l, blockpos3))
                 {
                     return j;
                 }
@@ -296,6 +296,7 @@
 
         if (!this.func_76497_e())
         {
+            this.field_175946_l = null; //Fix vanilla Mem leak, holds latest world
             return false;
         }
         else
@@ -304,15 +305,18 @@
             this.func_175941_b();
             this.func_175942_c();
             this.func_175939_d();
+            this.field_175946_l = null; //Fix vanilla Mem leak, holds latest world
             return true;
         }
     }
 
     private boolean func_76497_e()
     {
-        Block block = this.field_175946_l.func_180495_p(this.field_175947_m.func_177977_b()).func_177230_c();
+        BlockPos down = this.field_175947_m.func_177977_b();
+        net.minecraft.block.state.IBlockState state = this.field_175946_l.func_180495_p(down);
+        boolean isSoil = state.func_177230_c().canSustainPlant(this.field_175946_l, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g));
 
-        if (block != Blocks.field_150346_d && block != Blocks.field_150349_c && block != Blocks.field_150458_ak)
+        if (!isSoil)
         {
             return false;
         }
