diff --git a/src/main/java/fr/moribus/imageonmap/gui/core/AbstractGui.java b/src/main/java/fr/moribus/imageonmap/gui/core/AbstractGui.java
index 0573468..f05f0b9 100644
--- a/src/main/java/fr/moribus/imageonmap/gui/core/AbstractGui.java
+++ b/src/main/java/fr/moribus/imageonmap/gui/core/AbstractGui.java
@@ -34,63 +34,228 @@ public abstract class AbstractGui {
 	protected TreeMap<Integer, String> actions = new TreeMap<>();
 	protected Inventory inventory;
 
+	/**
+	 * This method is called when the inventory is open through the
+	 * {@link GuiManager}. Use this to populate the GUI.
+	 *
+	 * You will have to store the inventory inside the {@link AbstractGui#inventory} protected attribute,
+	 * as this attribute will be used by all other methods.
+	 *
+	 * @param player The player this GUI will be displayed to.
+	 */
 	public abstract void display(Player player);
 
-	public void update(Player player) {}
+	/**
+	 * A standard way to update the GUI when it is not closed. This method is
+	 * never called automatically, you have to call it when needed.
+	 *
+	 * @param player The player this GUI is displayed to.
+	 */
+	public void update(Player player)
+	{
 
-	public void onClose(Player player) {}
+	}
 
+	/**
+	 * Call this to open the GUI. The GUI is not automatically open, allowing you
+	 * to open it at the best moment (before or after populating it, as example).
+	 *
+	 * @param player The player this GUI will be displayed to.
+	 */
+	public void open(Player player)
+	{
+		player.openInventory(inventory);
+	}
+
+	/**
+	 * This method will be called when the GUI is closed.
+	 *
+	 * @param player The player this GUI was displayed to.
+	 */
+	public void onClose(Player player)
+	{
+
+	}
+
+	/**
+	 * This method will be called when the player clicks on the GUI.
+	 *
+	 * @param player The player who clicked on the GUI.
+	 * @param stack The clicked {@link ItemStack}.
+	 * @param action The action associated with this slot using {@link AbstractGui#setSlotData(ItemStack, int, String)}
+	 *                  or other similar methods.
+	 * @param clickType The click.
+	 * @param invAction The inventory action.
+	 * @param event The full {@link InventoryClickEvent} triggered by the player.
+	 */
 	public void onClick(Player player, ItemStack stack, String action, ClickType clickType, InventoryAction invAction, InventoryClickEvent event)
 	{
 		this.onClick(player, stack, action, clickType, invAction);
 	}
 
+	/**
+	 * This method will be called when the player clicks on the GUI.
+	 *
+	 * @param player The player who clicked on the GUI.
+	 * @param stack The clicked {@link ItemStack}.
+	 * @param action The action associated with this slot using {@link AbstractGui#setSlotData(ItemStack, int, String)}
+	 *                  or other similar methods.
+	 * @param clickType The click.
+	 * @param invAction The inventory action.
+	 */
 	public void onClick(Player player, ItemStack stack, String action, ClickType clickType, InventoryAction invAction)
 	{
 		this.onClick(player, stack, action, clickType);
 	}
 
+	/**
+	 * This method will be called when the player clicks on the GUI.
+	 *
+	 * @param player The player who clicked on the GUI.
+	 * @param stack The clicked {@link ItemStack}.
+	 * @param action The action associated with this slot using {@link AbstractGui#setSlotData(ItemStack, int, String)}
+	 *                  or other similar methods.
+	 * @param clickType The click.
+	 */
 	public void onClick(Player player, ItemStack stack, String action, ClickType clickType)
 	{
 		this.onClick(player, stack, action);
 	}
 
+	/**
+	 * This method will be called when the player clicks on the GUI.
+	 *
+	 * @param player The player who clicked on the GUI.
+	 * @param stack The clicked {@link ItemStack}.
+	 * @param action The action associated with this slot using {@link AbstractGui#setSlotData(ItemStack, int, String)}
+	 *                  or other similar methods.
+	 */
 	public void onClick(Player player, ItemStack stack, String action) {}
 
 
+	/**
+	 * This method will be called when the user places an item in the GUI, either by shift-click or directly.
+	 *
+	 * Use the {@link InventoryAction} to distinguish these cases.
+	 *
+	 * @param player The played who moved the stack to the GUI.
+	 * @param stack The moved {@link ItemStack}.
+	 * @param clickType The click.
+	 * @param invAction The inventory action.
+	 * @param event The full {@link InventoryClickEvent} triggered by the player.
+	 */
 	public void onItemDeposit(Player player, ItemStack stack, ClickType clickType, InventoryAction invAction, InventoryClickEvent event)
 	{
 		onItemDeposit(player, stack, clickType, invAction);
 	}
 
+	/**
+	 * This method will be called when the user places an item in the GUI, either by shift-click or directly.
+	 *
+	 * Use the {@link InventoryAction} to distinguish these cases.
+	 *
+	 * @param player The played who moved the stack to the GUI.
+	 * @param stack The moved {@link ItemStack}.
+	 * @param clickType The click.
+	 * @param invAction The inventory action.
+	 */
 	public void onItemDeposit(Player player, ItemStack stack, ClickType clickType, InventoryAction invAction)
 	{
 		onItemDeposit(player, stack, clickType);
 	}
 
+	/**
+	 * This method will be called when the user places an item in the GUI, either by shift-click or directly.
+	 *
+	 * Use the {@link InventoryAction} to distinguish these cases.
+	 *
+	 * @param player The played who moved the stack to the GUI.
+	 * @param stack The moved {@link ItemStack}.
+	 * @param clickType The click.
+	 */
 	public void onItemDeposit(Player player, ItemStack stack, ClickType clickType)
 	{
 		onItemDeposit(player, stack);
 	}
 
-	public void onItemDeposit(Player player, ItemStack stack) {}
+	/**
+	 * This method will be called when the user places an item in the GUI, either by shift-click or directly.
+	 *
+	 * Use the {@link InventoryAction} to distinguish these cases.
+	 *
+	 * @param player The played who moved the stack to the GUI.
+	 * @param stack The moved {@link ItemStack}.
+	 */
+	public void onItemDeposit(Player player, ItemStack stack)
+	{
 
+	}
 
+	/**
+	 * Registers a slot as a managed one.
+	 *
+	 * When such a slot is clicked by the player, the {@link #onClick(Player, ItemStack, String, ClickType, InventoryAction, InventoryClickEvent)}
+	 * method is called (and all methods with the same name and less arguments).
+	 *
+	 * @param inv The inventory the item will be added to.
+	 * @param name The display name of the item.
+	 * @param material The material of this item.
+	 * @param slot The slot this item will be added to.
+	 * @param description The description (lore) of the item (one line per {@link String} in the array).
+	 * @param action The action associated with this slot, retrieved with the {@link #onClick(Player, ItemStack, String)] methods.
+	 */
 	public void setSlotData(Inventory inv, String name, Material material, int slot, String[] description, String action)
 	{
 		this.setSlotData(inv, name, new ItemStack(material, 1), slot, description, action);
 	}
 
+	/**
+	 * Registers a slot as a managed one, using the default inventory.
+	 *
+	 * When such a slot is clicked by the player, the {@link #onClick(Player, ItemStack, String, ClickType, InventoryAction, InventoryClickEvent)}
+	 * method is called (and all methods with the same name and less arguments).
+	 *
+	 * @param name The display name of the item.
+	 * @param material The material of this item.
+	 * @param slot The slot this item will be added to.
+	 * @param description The description (lore) of the item (one line per {@link String} in the array).
+	 * @param action The action associated with this slot, retrieved with the {@link #onClick(Player, ItemStack, String)] methods.
+	 */
 	public void setSlotData(String name, Material material, int slot, String[] description, String action)
 	{
 		this.setSlotData(this.inventory, name, new ItemStack(material, 1), slot, description, action);
 	}
 
+	/**
+	 * Registers a slot as a managed one, using the default inventory.
+	 *
+	 * When such a slot is clicked by the player, the {@link #onClick(Player, ItemStack, String, ClickType, InventoryAction, InventoryClickEvent)}
+	 * method is called (and all methods with the same name and less arguments).
+	 *
+	 * @param name The display name of the item.
+	 * @param item The {@link ItemStack} displayed in this slot.
+	 * @param slot The slot this item will be added to.
+	 * @param description The description (lore) of the item (one line per {@link String} in the array).
+	 * @param action The action associated with this slot, retrieved with the {@link #onClick(Player, ItemStack, String)] methods.
+	 */
 	public void setSlotData(String name, ItemStack item, int slot, String[] description, String action)
 	{
 		this.setSlotData(this.inventory, name, item, slot, description, action);
 	}
 
+	/**
+	 * Registers a slot as a managed one.
+	 *
+	 * When such a slot is clicked by the player, the {@link #onClick(Player, ItemStack, String, ClickType, InventoryAction, InventoryClickEvent)}
+	 * method is called (and all methods with the same name and less arguments).
+	 *
+	 * @param inv The inventory the item will be added to.
+	 * @param name The display name of the item.
+	 * @param item The {@link ItemStack} displayed in this slot.
+	 * @param slot The slot this item will be added to.
+	 * @param description The description (lore) of the item (one line per {@link String} in the array).
+	 * @param action The action associated with this slot, retrieved with the {@link #onClick(Player, ItemStack, String)] methods.
+	 */
 	public void setSlotData(Inventory inv, String name, ItemStack item, int slot, String[] description, String action)
 	{
 		this.actions.put(slot, action);
@@ -105,17 +270,45 @@ public abstract class AbstractGui {
 		inv.setItem(slot, item);
 	}
 
+	/**
+	 * Registers a slot as a managed one.
+	 *
+	 * When such a slot is clicked by the player, the {@link #onClick(Player, ItemStack, String, ClickType, InventoryAction, InventoryClickEvent)}
+	 * method is called (and all methods with the same name and less arguments).
+	 *
+	 * @param inv The inventory the item will be added to.
+	 * @param item The {@link ItemStack} displayed in this slot.
+	 * @param slot The slot this item will be added to.
+	 * @param action The action associated with this slot, retrieved with the {@link #onClick(Player, ItemStack, String)] methods.
+	 */
 	public void setSlotData(Inventory inv, ItemStack item, int slot, String action)
 	{
 		this.actions.put(slot, action);
 		inv.setItem(slot, item);
 	}
 
+	/**
+	 * Registers a slot as a managed one, using the default inventory.
+	 *
+	 * When such a slot is clicked by the player, the {@link #onClick(Player, ItemStack, String, ClickType, InventoryAction, InventoryClickEvent)}
+	 * method is called (and all methods with the same name and less arguments).
+	 *
+	 * @param item The {@link ItemStack} displayed in this slot.
+	 * @param slot The slot this item will be added to.
+	 * @param action The action associated with this slot, retrieved with the {@link #onClick(Player, ItemStack, String)] methods.
+	 */
 	public void setSlotData(ItemStack item, int slot, String action)
 	{
 		setSlotData(this.inventory, item, slot, action);
 	}
 
+	/**
+	 * Returns the registered action associated with the given slot.
+	 *
+	 * @param slot The slot.
+	 *
+	 * @return The action; {@code null} if there isn't any action registered to this slot.
+	 */
 	public String getAction(int slot)
 	{
 		if (!this.actions.containsKey(slot))
@@ -124,15 +317,27 @@ public abstract class AbstractGui {
 		return this.actions.get(slot);
 	}
 
+	/**
+	 * Returns the slot registered to the given action.
+	 *
+	 * @param action The action.
+	 *
+	 * @return The slot; {@code -1} if this action is not registered.
+	 */
 	public int getSlot(String action)
 	{
 		for (int slot : this.actions.keySet())
 			if (this.actions.get(slot).equals(action))
 				return slot;
 
-		return 0;
+		return -1;
 	}
 
+	/**
+	 * Returns the default inventory.
+	 *
+	 * @return The inventory.
+	 */
 	public Inventory getInventory()
 	{
 		return this.inventory;
diff --git a/src/main/java/fr/moribus/imageonmap/gui/core/GuiListener.java b/src/main/java/fr/moribus/imageonmap/gui/core/GuiListener.java
index 2201cb8..5018408 100644
--- a/src/main/java/fr/moribus/imageonmap/gui/core/GuiListener.java
+++ b/src/main/java/fr/moribus/imageonmap/gui/core/GuiListener.java
@@ -18,12 +18,15 @@
 
 package fr.moribus.imageonmap.gui.core;
 
-import fr.moribus.imageonmap.*;
-import org.bukkit.*;
-import org.bukkit.entity.*;
-import org.bukkit.event.*;
-import org.bukkit.event.inventory.*;
-import org.bukkit.inventory.*;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.event.inventory.InventoryDragEvent;
+import org.bukkit.inventory.PlayerInventory;
+import org.bukkit.plugin.Plugin;
 
 
 /**
@@ -33,7 +36,7 @@ import org.bukkit.inventory.*;
  */
 public class GuiListener implements Listener {
 
-	public static void init(ImageOnMap plugin)
+	public static void init(Plugin plugin)
 	{
 		plugin.getServer().getPluginManager().registerEvents(new GuiListener(), plugin);
 	}
@@ -65,7 +68,7 @@ public class GuiListener implements Listener {
 			}
 
 
-			/* *** Click on the “chest” *** */
+			/* *** Click on the GUI inventory *** */
 
 			if(event.getCursor() != null && event.getCursor().getType() != Material.AIR)
 			{
diff --git a/src/main/java/fr/moribus/imageonmap/gui/core/GuiManager.java b/src/main/java/fr/moribus/imageonmap/gui/core/GuiManager.java
index 7427b3c..4b2ae1a 100644
--- a/src/main/java/fr/moribus/imageonmap/gui/core/GuiManager.java
+++ b/src/main/java/fr/moribus/imageonmap/gui/core/GuiManager.java
@@ -18,29 +18,44 @@
 
 package fr.moribus.imageonmap.gui.core;
 
-import fr.moribus.imageonmap.*;
-import org.bukkit.entity.*;
+import org.bukkit.entity.HumanEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 /**
- * @author IamBlueSlime (thanks c:)
+ * A tool to easily manage GUIs.
  *
- * Changes by Amaury Carrade to use statics (beh, code style, these things).
+ * @author IamBlueSlime and Amaury Carrade.
  */
 public class GuiManager {
 
 	protected static Map<UUID, AbstractGui> currentGUIs;
 
-	public static void init(ImageOnMap plugin)
+	/**
+	 * Call this when the plugin is enabled.
+	 *
+	 * @param plugin The plugin using this.
+	 */
+	public static void init(Plugin plugin)
 	{
 		currentGUIs = new ConcurrentHashMap<>();
 
 		GuiListener.init(plugin);
 	}
 
+	/**
+	 * Opens a GUI for the given player.
+	 *
+	 * Closes any GUI already open for this player.
+	 *
+	 * @param player The player this GUI will be open to.
+	 * @param gui The GUI to open.
+	 */
 	public static void openGui(Player player, AbstractGui gui)
 	{
 		if (currentGUIs.containsKey(player.getUniqueId()))
@@ -50,21 +65,41 @@ public class GuiManager {
 		gui.display(player);
 	}
 
+	/**
+	 * Closes the currently open GUI of this player, if it exists.
+	 *
+	 * Without any open GUI for this player, does nothing.
+	 *
+	 * @param player The player.
+	 */
 	public static void closeGui(Player player)
 	{
 		player.closeInventory();
 		removeClosedGui(player);
 	}
 
+	/**
+	 * Calls the {@link AbstractGui#onClose(Player)} method of the currently open GUI of the
+	 * given {@link Player} and unregisters it as open.
+	 *
+	 * @param player The player
+	 */
 	public static void removeClosedGui(Player player)
 	{
 		if (currentGUIs.containsKey(player.getUniqueId()))
 		{
+			//noinspection ConstantConditions
 			getPlayerGui(player).onClose(player);
 			currentGUIs.remove(player.getUniqueId());
 		}
 	}
 
+	/**
+	 * Returns the currently open {@link AbstractGui} of the given {@link HumanEntity}.
+	 *
+	 * @param player The HumanEntity.
+	 * @return The open GUI, or {@code null} if no GUI are open.
+	 */
 	public static AbstractGui getPlayerGui(HumanEntity player)
 	{
 		if (currentGUIs.containsKey(player.getUniqueId()))
@@ -73,6 +108,11 @@ public class GuiManager {
 		return null;
 	}
 
+	/**
+	 * Returns all open GUIs.
+	 *
+	 * @return The GUI (map: player's {@link UUID} → {@link AbstractGui}).
+	 */
 	public static Map<UUID, AbstractGui> getPlayersGui()
 	{
 		return currentGUIs;
diff --git a/src/main/java/fr/moribus/imageonmap/gui/core/GuiUtils.java b/src/main/java/fr/moribus/imageonmap/gui/core/GuiUtils.java
index 1453585..95d7c23 100644
--- a/src/main/java/fr/moribus/imageonmap/gui/core/GuiUtils.java
+++ b/src/main/java/fr/moribus/imageonmap/gui/core/GuiUtils.java
@@ -48,6 +48,12 @@ public class GuiUtils {
 		}
 	}
 
+	/**
+	 * Removes the vanilla informations displayed on the tooltips of the given item,
+	 * like enchantments, map infos, etc.
+	 *
+	 * @param stack The item.
+	 */
 	public static void removeVanillaInfos(ItemStack stack)
 	{
 		ItemMeta meta = stack.getItemMeta();
@@ -55,6 +61,12 @@ public class GuiUtils {
 		stack.setItemMeta(meta);
 	}
 
+	/**
+	 * Removes the vanilla informations displayed on the tooltips of the given item,
+	 * like enchantments, map infos, etc.
+	 *
+	 * @param meta The item's metadata.
+	 */
 	public static void removeVanillaInfos(ItemMeta meta)
 	{
 		if(!supported) return;