diff --git a/resource/plugin.yml b/resource/plugin.yml
index 0a3dd52..0211591 100644
--- a/resource/plugin.yml
+++ b/resource/plugin.yml
@@ -1,4 +1,4 @@
-version: 3.15.2.4
+version: 3.15.3.0
 main: me.rockyhawk.commandpanels.CommandPanels
 name: CommandPanels
 author: RockyHawk
diff --git a/src/me/rockyhawk/commandpanels/CommandPanels.java b/src/me/rockyhawk/commandpanels/CommandPanels.java
index d771d0d..9537d62 100644
--- a/src/me/rockyhawk/commandpanels/CommandPanels.java
+++ b/src/me/rockyhawk/commandpanels/CommandPanels.java
@@ -10,6 +10,7 @@ import me.clip.placeholderapi.PlaceholderAPI;
 import me.rockyhawk.commandpanels.api.CommandPanelsAPI;
 import me.rockyhawk.commandpanels.api.Panel;
 import me.rockyhawk.commandpanels.classresources.*;
+import me.rockyhawk.commandpanels.classresources.item_fall.ItemFallManager;
 import me.rockyhawk.commandpanels.commands.*;
 import me.rockyhawk.commandpanels.completetabs.CpTabComplete;
 import me.rockyhawk.commandpanels.customcommands.CommandPlaceholderLoader;
@@ -140,6 +141,7 @@ public class CommandPanels extends JavaPlugin{
         this.getServer().getPluginManager().registerEvents(new UtilsPanelsLoader(this), this);
         this.getServer().getPluginManager().registerEvents(new GenUtils(this), this);
         this.getServer().getPluginManager().registerEvents(new CommandpanelUserInput(this), this);
+        this.getServer().getPluginManager().registerEvents(new ItemFallManager(this), this);
 
         //if refresh-panels set to false, don't load this
         if(Objects.requireNonNull(config.getString("config.refresh-panels")).equalsIgnoreCase("true")){
diff --git a/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java b/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java
index eb43ce3..b5d56d3 100644
--- a/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java
+++ b/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java
@@ -273,6 +273,7 @@ public class ItemCreation {
                         patterns.add(new Pattern(DyeColor.valueOf(dyePattern[0]), PatternType.valueOf(dyePattern[1]))); //load patterns in config: RED:STRIPE_TOP
                     }
                     bannerMeta.setPatterns(patterns);
+                    bannerMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
                     s.setItemMeta(bannerMeta);
                 }
             }catch(Exception ignore){
@@ -327,20 +328,28 @@ public class ItemCreation {
             }
             if (itemSection.contains("damage")) {
                 //change the damage amount (placeholders accepted)
-                if(plugin.legacy.isLegacy()){
+                //if the damage is not unbreakable and should be a value
+                if (plugin.legacy.isLegacy()) {
                     try {
                         s.setDurability(Short.parseShort(Objects.requireNonNull(plugin.papi(p, itemSection.getString("damage")))));
-                    }catch(Exception e){
-                        plugin.debug(e,p);
+                    } catch (Exception e) {
+                        plugin.debug(e, p);
                         p.sendMessage(plugin.papi(plugin.tag + plugin.config.getString("config.format.error") + " damage: " + itemSection.getString("damage")));
                     }
-                }else {
+                } else {
+                    if(itemSection.getString("damage").equalsIgnoreCase("-1")){
+                        //if the player wants the item to be unbreakable. Only works in non legacy versions
+                        ItemMeta unbreak = s.getItemMeta();
+                        unbreak.setUnbreakable(true);
+                        s.setItemMeta(unbreak);
+                    }
+
                     try {
                         Damageable itemDamage = (Damageable) s.getItemMeta();
                         itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.papi(p, itemSection.getString("damage")))));
                         s.setItemMeta((ItemMeta) itemDamage);
                     } catch (Exception e) {
-                        plugin.debug(e,p);
+                        plugin.debug(e, p);
                         p.sendMessage(plugin.papi(plugin.tag + plugin.config.getString("config.format.error") + " damage: " + itemSection.getString("damage")));
                     }
                 }
@@ -369,7 +378,7 @@ public class ItemCreation {
 
     //hasperm hasvalue, etc sections will be done here
     public String hasSection(ConfigurationSection cf, Player p){
-        if (cf.contains("hasvalue")) {
+        if (cf.isSet("hasvalue")) {
             //this will do the hasvalue without any numbers
             boolean outputValue = true;
             //outputValue will default to true
diff --git a/src/me/rockyhawk/commandpanels/classresources/item_fall/ItemFallManager.java b/src/me/rockyhawk/commandpanels/classresources/item_fall/ItemFallManager.java
new file mode 100644
index 0000000..5fe84f3
--- /dev/null
+++ b/src/me/rockyhawk/commandpanels/classresources/item_fall/ItemFallManager.java
@@ -0,0 +1,45 @@
+package me.rockyhawk.commandpanels.classresources.item_fall;
+
+import me.rockyhawk.commandpanels.CommandPanels;
+import me.rockyhawk.commandpanels.api.PanelClosedEvent;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.scheduler.BukkitRunnable;
+
+public class ItemFallManager implements Listener {
+    CommandPanels plugin;
+    public ItemFallManager(CommandPanels pl) {
+        this.plugin = pl;
+    }
+
+    @EventHandler
+    public void panelCloseItemsDrop(PanelClosedEvent e){
+        new BukkitRunnable(){
+            @Override
+            public void run(){
+                for(String item : e.getPanel().getConfig().getConfigurationSection("item").getKeys(false)){
+                    if(e.getPanel().getConfig().isSet("item." + item + ".itemType")){
+                        if(e.getPanel().getConfig().getStringList("item." + item + ".itemType").contains("dropItem")){
+                            ItemStack stack = e.getPlayer().getOpenInventory().getTopInventory().getItem(Integer.parseInt(item));
+                            if(stack == null || stack.getType() == Material.AIR){
+                                continue;
+                            }
+
+                            //trigger event and check for cancel
+                            PanelItemDropEvent dropEvent = new PanelItemDropEvent(e.getPlayer(),e.getPanel(),stack);
+                            Bukkit.getPluginManager().callEvent(dropEvent);
+                            if(dropEvent.isCancelled()){
+                                continue;
+                            }
+
+                            e.getPlayer().getWorld().dropItem(e.getPlayer().getLocation(),stack);
+                        }
+                    }
+                }
+            }
+        }.run();
+    }
+}
diff --git a/src/me/rockyhawk/commandpanels/classresources/item_fall/PanelItemDropEvent.java b/src/me/rockyhawk/commandpanels/classresources/item_fall/PanelItemDropEvent.java
new file mode 100644
index 0000000..a6adada
--- /dev/null
+++ b/src/me/rockyhawk/commandpanels/classresources/item_fall/PanelItemDropEvent.java
@@ -0,0 +1,51 @@
+package me.rockyhawk.commandpanels.classresources.item_fall;
+
+import me.rockyhawk.commandpanels.api.Panel;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+import org.bukkit.inventory.ItemStack;
+
+public class PanelItemDropEvent extends Event implements Cancellable {
+
+    private boolean isCancelled;
+    private final Player p;
+    private final Panel panel;
+    private final ItemStack item;
+
+    public boolean isCancelled() {
+        return this.isCancelled;
+    }
+
+    public void setCancelled(boolean isCancelled) {
+        this.isCancelled = isCancelled;
+    }
+
+    public PanelItemDropEvent(Player player, Panel panel, ItemStack drop) {
+        this.p = player;
+        this.panel = panel;
+        this.item = drop;
+    }
+
+    public Player getPlayer(){
+        return this.p;
+    }
+
+    public ItemStack getItem(){
+        return this.item;
+    }
+
+    public Panel getPanel(){
+        return this.panel;
+    }
+
+    private static final HandlerList HANDLERS = new HandlerList();
+    public HandlerList getHandlers() {
+        return HANDLERS;
+    }
+
+    public static HandlerList getHandlerList() {
+        return HANDLERS;
+    }
+}
diff --git a/src/me/rockyhawk/commandpanels/openwithitem/HotbarItemLoader.java b/src/me/rockyhawk/commandpanels/openwithitem/HotbarItemLoader.java
index de42909..5e19d20 100644
--- a/src/me/rockyhawk/commandpanels/openwithitem/HotbarItemLoader.java
+++ b/src/me/rockyhawk/commandpanels/openwithitem/HotbarItemLoader.java
@@ -44,6 +44,9 @@ public class HotbarItemLoader {
                     if(!plugin.panelPerms.isPanelWorldEnabled(p,panel.getConfig())){
                         return false;
                     }
+                    if(!itemCheckExecute(p.getInventory().getItem(slot),p,false,false)){
+                        return false;
+                    }
                     if(panel.getConfig().contains("open-with-item.commands")){
                         for(String command : panel.getConfig().getStringList("open-with-item.commands")){
                             plugin.commandTags.commandTags(p,plugin.papi(p,command),command);
diff --git a/src/me/rockyhawk/commandpanels/openwithitem/UtilsChestSortEvent.java b/src/me/rockyhawk/commandpanels/openwithitem/UtilsChestSortEvent.java
index a0b6e2f..131aefe 100644
--- a/src/me/rockyhawk/commandpanels/openwithitem/UtilsChestSortEvent.java
+++ b/src/me/rockyhawk/commandpanels/openwithitem/UtilsChestSortEvent.java
@@ -18,7 +18,6 @@ public class UtilsChestSortEvent implements Listener {
             return;
         }
         //If the ChestSort plugin triggers an event
-        plugin.getServer().getConsoleSender().sendMessage(e.getInventory().getType().toString());
         if(e.getInventory().getType() == InventoryType.PLAYER){
             for(int slot : plugin.hotbar.getStationaryItemSlots()){
                 e.setUnmovable(slot);