diff --git a/docs/helpers.rst b/docs/helpers.rst
index b77c57285e20454d372e2477f87bc7c348fac77c..79e8e40a605b6c808f3de431015df570cc2201cd 100644
--- a/docs/helpers.rst
+++ b/docs/helpers.rst
@@ -62,6 +62,9 @@ BaseLocation
    .. autoattribute:: geysers
 
    .. automethod:: get_ground_distance
+      
+      This function uses BFS and moves in a vertical and horizontal position. Because of this,
+      the distance might overshoot compared to calculating it with Pythagoras' theorem.
 
    .. automethod:: is_occupied_by_player
 
diff --git a/docs/idabot.rst b/docs/idabot.rst
index a2c4d935a844bea19b70185e00ba7afeeac574a8..714ed3cc33420599666992c423dfeb994e77d609 100644
--- a/docs/idabot.rst
+++ b/docs/idabot.rst
@@ -61,11 +61,11 @@ IDABot
 
    .. method:: IDABot.has_creep(self, Point2D) -> Boolean
 
-      Returns if the position has a creep.
+      Returns if the position has a creep
 
    .. method:: IDABot.move_camera(self, Point2DI)
 
-      Move the camera to the position.
+      Move the camera to the position
 
    Attributes:
 
@@ -88,63 +88,63 @@ The debug-methods are a great tool for speeding up the process.
    .. method:: IDABot.debug_create_unit(self, UnitTypeID, Point2D, Player Constant, Int)
 
       This method creates the nr (INT) of units on the position of the Point2D, the unit 
-      belongs to the Player Constant.
+      belongs to the Player Constant
 
    .. method:: IDABot.debug_kill_unit(self, Unit)
 
-      Kills the unit.
+      Kills the unit
 
    .. method:: IDABot.debug_show_map(self)
 
-      Make the entire map visible.
+      Make the entire map visible
 
    .. method:: IDABot.debug_fast_build(self)
 
-      Set the build time in game to 1.
+      Set the build time in game to 1
   
    .. method:: IDABot.debug_enemy_control(self)
 
-      Gives the player full control over the enemy.
+      Gives the player full control over the enemy
 
    .. method:: IDABot.debug_fast_build(self)
 
-      Set the build time in game to 1.
+      Set the build time in game to 1
 
    .. method:: IDABot.debug_ignore_food(self)
 
-      Ignore food in game.
+      Ignore food in game
 
    .. method:: IDABot.debug_ignore_resource_cost(self)
 
-      Ignore the resource cost in game. Everything cost 0 resources.
+      Ignore the resource cost in game. Everything cost 0 resources
 
    .. method:: IDABot.debug_give_all_resources(self)
 
-      Set the mineral and vespene gas to 5000.
+      Set the mineral and vespene gas to 5000
    
    .. method:: IDABot.debug_god_mode(self)
 
-      Give yourself god mode in the game.
+      Give yourself god mode in the game
 
    .. method:: IDABot.debug_ignore_mineral(self)
 
-      Ignore the mineral cost in the game.
+      Ignore the mineral cost in the game
 
    .. method:: IDABot.debug_no_cooldowns(self)
 
-      Deactivate cooldowns (Basically setting them to 0).
+      Deactivate cooldowns (Basically setting them to 0)
 
    .. method:: IDABot.debug_give_all_tech(self)
 
-      Give yourself all tech.
+      Give yourself all tech
 
    .. method:: IDABot.debug_give_all_upgrades(self)
 
-      Give yourself all upgrades.
+      Give yourself all upgrades
 
    .. method:: IDABot.debug_set_score(self, Float)
 
-      Set the player score in game.
+      Set the player score in game
 
    .. method:: IDABot.debug_end_game(self, Boolean)
 
@@ -153,13 +153,13 @@ The debug-methods are a great tool for speeding up the process.
 
    .. method:: IDABot.debug_set_energy(self, Float, Unit)
 
-      Set the amount (Float) of energy to the unit.
+      Set the amount (Float) of energy to the unit
 
    .. method:: IDABot.debug_set_life(self, Float, Unit)
 
-      Set the amount (Float) of life to the unit.
+      Set the amount (Float) of life to the unit
 
    .. method:: IDABot.debug_set_shields(self, Float, Unit)
 
-      Set the amount (Float) of shield to the unit.
+      Set the amount (Float) of shield to the unit
 
diff --git a/docs/types.rst b/docs/types.rst
index 6e3903cadd190ab6459da71ce4a87c7872691377..dd9986f59ffb4543fb5b1165a395d28ff6b5a251 100644
--- a/docs/types.rst
+++ b/docs/types.rst
@@ -9,6 +9,10 @@ For a full list of all abilities and upgrades, see :class:`library.ABILITY_ID`
 , :class:`library.UPGRADE_ID` and :class:`library.EFFECT_ID` respectively. Note that these does not have any
 wrapper classes for them.
 
+If any of the ID's doesn't respond with the game. Before contacting the labassistent, check the game version
+and the compatibility through Liquipedia. Some ID's might be left after a patch and is not available in
+the game anymore.
+
 UnitType
 --------
 
diff --git a/docs/unit.rst b/docs/unit.rst
index 28fd1a45ac0a54a12afde46ab2e0c82a87787734..e8c09acfa4461a68c91a14a6aa1e818c3ea205bb 100644
--- a/docs/unit.rst
+++ b/docs/unit.rst
@@ -36,7 +36,7 @@ Unit
    .. autoattribute:: is_alive 
    .. autoattribute:: is_blip
 
-      Returns true if unit is a "blip" - a ping on the map.
+      Returns true if unit is a "blip" - a ping on the map
 
    .. autoattribute:: is_being_constructed 
       
@@ -56,7 +56,7 @@ Unit
    .. attribute:: Unit.player 
 
       Returns the constant corresponding to player which this unit belongs to.
-      See :ref:`playerconstants` for more information.
+      See :ref:`playerconstants` for more information
 
    .. autoattribute:: position 
    .. autoattribute:: current_ability_id
@@ -83,30 +83,30 @@ Unit
 
    .. attribute:: Unit.target
 
-      Returns target if unit has one, otherwise will fail the assertion (make sure not to call this unless certain that the unit has a target!).
+      Returns target if unit has one, otherwise will fail the assertion (make sure not to call this unless certain that the unit has a target!)
 
    .. autoattribute:: gas_left_in_refinery
 
       This is used on the geyser.	
-      Returns the amount of gas left in refinery.
+      Returns the amount of gas left in refinery
 
    .. autoattribute:: minerals_left_in_mineralfield
 
-      Returns the amount of minerals left in mineralfield.
+      Returns the amount of minerals left in mineralfield
 
    .. autoattribute:: owner
 
-      Returns the Player ID, the owner of the unit.
+      Returns the Player ID, the owner of the unit
 
    Methods:
 
    .. automethod:: ability
 
-      Call an ability directly, different abilities has different targets. Some target the unit itself (no argument), target a point (Point2D as argument) and some target a Unit (instance of Unit as argument).
+      Call an ability directly, different abilities has different targets. Some target the unit itself (no argument), target a point (Point2D as argument) and some target a Unit (instance of Unit as argument)
 
    .. method:: Unit.is_constructing(self, unit_type: library.UnitType)
 
-      Returns true if the unit is currently constructing another unit of type `unit_type`. Note that `unit_type` needs to be an instance of :class:`library.UnitType`.
+      Returns true if the unit is currently constructing another unit of type `unit_type`. Note that `unit_type` needs to be an instance of :class:`library.UnitType`
 
    .. automethod:: stop
    .. automethod:: attack_unit
@@ -124,7 +124,7 @@ Unit
    .. automethod:: morph
    .. method:: Unit.has_target
 
-      Returns True if the target has a valid target and False otherwise.
+      Returns True if the target has a valid target and False otherwise
 
    .. automethod:: hold_position
    .. automethod:: stop_dance
diff --git a/python-api-src/lib_building_placer.cpp b/python-api-src/lib_building_placer.cpp
index b925c749ab99620325d6f9fd6195b60d37ee1024..f2aed9730fc09bea3c798a35ddc9dfcf06e7dc7e 100644
--- a/python-api-src/lib_building_placer.cpp
+++ b/python-api-src/lib_building_placer.cpp
@@ -6,8 +6,8 @@ void define_building_placer(py::module & m)
 {
     py::class_<BuildingPlacer>(m, "BuildingPlacer")
         .def("can_build_here", &BuildingPlacer::canBuildHere, "x"_a, "y"_a, "unit_type"_a)
-        .def("can_build_here_with_spaces", &BuildingPlacer::canBuildHereWithSpace, "x"_a, "y"_a, "unit_type"_a, "build_distance"_a)
-        .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "point2di"_a, "unit_type"_a, "build_distance"_a = 2, "search_count"_a = 1000)
-        .def("reserve_tiles", &BuildingPlacer::reserveTiles, "x"_a, "y"_a, "width"_a, "height"_a)
-        .def("free_tiles", &BuildingPlacer::freeTiles, "x"_a, "y"_a, "width"_a, "height"_a);
+        .def("can_build_here_with_spaces", &BuildingPlacer::canBuildHereWithSpace, "Creates a square with the help of x, y, distance_to_building and the size of the unit_type. Good approach if we later gonna make a addon to the building.", "x"_a, "y"_a, "unit_type"_a, "distance_to_building"_a)
+        .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "The search_count is how many building we should check (nearby buildings, instead of i < size, we can switch size to search_count). distance_to_building is the distance to the closest building.", "point2di"_a, "unit_type"_a, "distance_to_building"_a = 2, "search_count"_a = 1000)
+        .def("reserve_tiles", &BuildingPlacer::reserveTiles, "It's possible to reserve tiles, which makes it impossible to build at the position given by x and y.", "x"_a, "y"_a, "width"_a, "height"_a)
+        .def("free_tiles", &BuildingPlacer::freeTiles,"Free the tile (x, y) from reservation", "x"_a, "y"_a, "width"_a, "height"_a);
 }
\ No newline at end of file
diff --git a/src/BuildingPlacer.cpp b/src/BuildingPlacer.cpp
index 988ceca16c0197e8f765ab37c242e739c0be4160..bc94e5f92c8f4869c284ce6a2239b5201952e8d2 100644
--- a/src/BuildingPlacer.cpp
+++ b/src/BuildingPlacer.cpp
@@ -233,6 +233,9 @@ CCTilePosition BuildingPlacer::getRefineryPosition()
 
     for (auto & unit : m_bot.GetAllUnits())
     {
+		UnitType & refinery = Util::GetRefinery(m_bot.GetPlayerRace(Players::Self), m_bot);
+
+
         if (!unit.getType().isGeyser())
         {
             continue;
@@ -240,6 +243,13 @@ CCTilePosition BuildingPlacer::getRefineryPosition()
 
         CCPosition geyserPos(unit.getPosition());
 
+
+		// can't build a refinery on top of another
+		if (!m_bot.Map().canBuildTypeAtPosition((int)geyserPos.x, (int)geyserPos.y, refinery))
+		{
+			continue;
+		}
+
         // check to see if it's next to one of our depots
         bool nearDepot = false;
         for (auto & unit : m_bot.UnitInfo().getUnits(Players::Self))
diff --git a/src/UnitType.cpp b/src/UnitType.cpp
index 9fcad4336a89816dd923588b151013d6bb0de22d..33013aa3711b603401cb75c1bebf1fb12667c4d6 100644
--- a/src/UnitType.cpp
+++ b/src/UnitType.cpp
@@ -164,6 +164,8 @@ bool UnitType::isMineral() const
         case sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750      : return true;
         case sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD     : return true;
         case sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750  : return true;
+		case sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD		: return true;
+		case sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750	: return true;
         default: return false;
     }
 #else
@@ -366,7 +368,7 @@ bool UnitType::isMorphedBuilding() const
     }
 #else
     return  m_type == BWAPI::UnitTypes::Zerg_Sunken_Colony ||
-            m_type == BWAPI::UnitTypes::Zerg_Spore_Colony ||
+            m_type == BWAPI::UnitTypes::Zerg_Spore_Colony ||w
             m_type == BWAPI::UnitTypes::Zerg_Lair ||
             m_type == BWAPI::UnitTypes::Zerg_Hive ||
             m_type == BWAPI::UnitTypes::Zerg_Greater_Spire;