public boolean checkSuitability(Patch p) {
        int x = p.x;
        int y = p.y;
        
        if(candidateMap.get(p.key) != null)
        {
            return false;
        }
        /*
        if (Calculation.rangeQuery(Master.developedArea, x, y, rangeDevelop) != null)
        {
            if(Master.DEBUG_FLAG) System.err.println("Too close to developed area.");
            return false;
        }
        */
        if (Calculation.rangeQuery(Master.waterDepth, x, y, waterDist) == null)
        {
            if(Master.DEBUG_FLAG) System.err.println("Too far from wet area.");
            ++tFFW;
            return false;
        }
        ++closeToWater;
        if(Calculation.rangeQuery(Master.youngForests, x, y, 1) == null)
        {
            if(Master.DEBUG_FLAG) System.err.println("Too far from young forest.");
            ++tFFF;
            return false;
        }
        /*
        if(Calculation.rangeQuery(candidateTree, x, y, 1) != null)
        {
            if(Master.DEBUG_FLAG) System.err.println("Too close to other candidate.");
            return false;
        }
        */
        
        if(p.age < 3)
        {
            ++alreadySuitable;
            return true;
        }

        habitatCandidates.add(p);
        candidateMap.put(p.key, p);
        //candidateTree.insert(p.box);
        
        return true;
    }