diff --git a/L2J_DataPack_BETA/dist/game/data/scripts.cfg b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
index f1777299f1595573931d37343edb3abdd601fcf0..2d7a341aba5b1301b917ae60473b33d2b9c783ab 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts.cfg
+++ b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
@@ -307,10 +307,10 @@ quests/46_OnceMoreInTheArmsOfTheMotherTree/__init__.py
 quests/47_IntoTheDarkForest/__init__.py
 quests/48_ToTheImmortalPlateau/__init__.py
 quests/49_TheRoadHome/__init__.py
-quests/50_LanoscosSpecialBait/__init__.py
-quests/51_OFullesSpecialBait/__init__.py
-quests/52_WilliesSpecialBait/__init__.py
-quests/53_LinnaeusSpecialBait/__init__.py
+quests/Q50_LanoscosSpecialBait/Q50_LanoscosSpecialBait.java
+quests/Q51_OFullesSpecialBait/Q51_OFullesSpecialBait.java
+quests/Q52_WilliesSpecialBait/Q52_WilliesSpecialBait.java
+quests/Q53_LinnaeusSpecialBait/Q53_LinnaeusSpecialBait.java
 quests/60_GoodWorkReward/__init__.py
 quests/61_LawEnforcement/__init__.py
 quests/62_PathoftheTrooper/__init__.py
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/__init__.py b/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/__init__.py
deleted file mode 100644
index 31b019cdc178fedc525ec88b5ad3f5b7c1e2eade..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/__init__.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# This is essentially a DrLecter's copy&paste from
-# a Kilkenny's contribution to the Official L2J Datapack Project.
-# Visit http://www.l2jdp.com/trac if you find a bug.
-import sys
-from com.l2jserver import Config
-from com.l2jserver.gameserver.model.quest import State
-from com.l2jserver.gameserver.model.quest import QuestState
-from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
-
-qn = "50_LanoscosSpecialBait"
-
-#NPC
-LANOSCO = 31570
-#ITEMS
-ESSENCE_OF_WIND = 7621
-#REWARDS
-WIND_FISHING_LURE = 7610
-#MOB
-SINGING_WIND = 21026
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [ESSENCE_OF_WIND]
-
- def onAdvEvent (self,event,npc, player) :
-   htmltext = event
-   st = player.getQuestState(qn)
-   if not st : return
-   if event == "31570-03.htm" :
-     st.set("cond","1")
-     st.setState(State.STARTED)
-     st.playSound("ItemSound.quest_accept")
-   elif event == "31570-07.htm" and st.getQuestItemsCount(ESSENCE_OF_WIND) == 100 :
-     htmltext = "31570-06.htm"
-     st.giveItems(WIND_FISHING_LURE,4)
-     st.takeItems(ESSENCE_OF_WIND,-1)
-     st.playSound("ItemSound.quest_finish")
-     st.unset("cond")
-     st.exitQuest(False)
-   return htmltext
-
- def onTalk (Self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-   npcId = npc.getNpcId()
-   id = st.getState()
-   cond = st.getInt("cond")
-   if id == State.COMPLETED :
-      htmltext = Quest.getAlreadyCompletedMsg(player)
-
-   elif cond == 0 :
-      if player.getLevel() >= 27 :
-         htmltext = "31570-01.htm"
-      else:
-         htmltext = "31570-02.htm"
-         st.exitQuest(1)
-   elif id == State.STARTED :
-      if st.getQuestItemsCount(ESSENCE_OF_WIND) == 100 :
-         htmltext = "31570-04.htm"
-      else :
-         htmltext = "31570-05.htm"
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   partyMember = self.getRandomPartyMember(player,"1")
-   if not partyMember : return
-   st = partyMember.getQuestState(qn)
-   if st :
-      count = st.getQuestItemsCount(ESSENCE_OF_WIND)
-      if st.getInt("cond") == 1 and count < 100 :
-         chance = 33 * Config.RATE_QUEST_DROP
-         numItems, chance = divmod(chance,100)
-         if self.getRandom(100) < chance : 
-            numItems += 1
-         if numItems :
-            if count + numItems >= 100 :
-               numItems = 100 - count
-               st.playSound("ItemSound.quest_middle")
-               st.set("cond","2")
-            else:
-               st.playSound("ItemSound.quest_itemget")
-            st.giveItems(ESSENCE_OF_WIND,int(numItems))
-   return
-
-QUEST       = Quest(50,qn,"Lanosco's Special Bait")
-
-QUEST.addStartNpc(LANOSCO)
-QUEST.addTalkId(LANOSCO)
-
-QUEST.addKillId(SINGING_WIND)
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/__init__.py b/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/__init__.py
deleted file mode 100644
index 53ac4d833071785837946b8bc20d617b424ae522..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/__init__.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Contributed by Kilkenny to the Official L2J Datapack Project.
-# with little cleanups by DrLecter.
-# Visit http://www.l2jdp.com/trac if you find a bug.
-import sys
-from com.l2jserver import Config
-from com.l2jserver.gameserver.model.quest import State
-from com.l2jserver.gameserver.model.quest import QuestState
-from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
-
-qn = "51_OFullesSpecialBait"
-
-#NPC
-OFULLE = 31572
-#ITEMS
-LOST_BAIT = 7622
-#REWARDS
-ICY_AIR_LURE = 7611
-#MOB
-FETTERED_SOUL = 20552
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [LOST_BAIT]
-
- def onEvent (self,event,st) :
-   htmltext = event
-   if event == "31572-03.htm" :
-     st.set("cond","1")
-     st.setState(State.STARTED)
-     st.playSound("ItemSound.quest_accept")
-   elif event == "31572-07.htm" and st.getQuestItemsCount(LOST_BAIT) == 100 :
-     htmltext = "31572-06.htm"
-     st.giveItems(ICY_AIR_LURE,4)
-     st.takeItems(LOST_BAIT,-1)
-     st.playSound("ItemSound.quest_finish")
-     st.exitQuest(False)
-     st.unset("cond")
-   return htmltext
-
- def onTalk (Self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-   npcId = npc.getNpcId()
-   id = st.getState()
-   cond = st.getInt("cond")
-   if id == State.COMPLETED :
-      htmltext = Quest.getAlreadyCompletedMsg(player)
-
-   elif cond == 0 :
-      if player.getLevel() >= 36 :
-         htmltext = "31572-01.htm"
-      else:
-         htmltext = "31572-02.htm"
-         st.exitQuest(1)
-   elif id == State.STARTED :
-      if st.getQuestItemsCount(LOST_BAIT) == 100 :
-         htmltext = "31572-04.htm"
-      else :
-         htmltext = "31572-05.htm"
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   partyMember = self.getRandomPartyMember(player,"1")
-   if not partyMember : return
-   st = partyMember.getQuestState(qn)
-   if st :
-      count = st.getQuestItemsCount(LOST_BAIT)
-      if st.getInt("cond") == 1 and count < 100 :
-         chance = 33 * Config.RATE_QUEST_DROP
-         numItems, chance = divmod(chance,100)
-         if self.getRandom(100) < chance : 
-            numItems += 1
-         if numItems :
-            if count + numItems >= 100 :
-               numItems = 100 - count
-               st.playSound("ItemSound.quest_middle")
-               st.set("cond","2")
-            else:
-               st.playSound("ItemSound.quest_itemget")
-            st.giveItems(LOST_BAIT,int(numItems))
-   return
-
-QUEST       = Quest(51,qn,"O'Fulle's Special Bait")
-
-QUEST.addStartNpc(OFULLE)
-QUEST.addTalkId(OFULLE)
-
-QUEST.addKillId(FETTERED_SOUL)
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/__init__.py b/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/__init__.py
deleted file mode 100644
index 98c859eb3ee88f4b29b7a434035bc50d9f1670f5..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/__init__.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# This is essentially a DrLecter's copy&paste from
-# a Kilkenny's contribution to the Official L2J Datapack Project.
-# Visit http://www.l2jdp.com/trac if you find a bug.
-import sys
-from com.l2jserver import Config
-from com.l2jserver.gameserver.model.quest import State
-from com.l2jserver.gameserver.model.quest import QuestState
-from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
-
-qn = "52_WilliesSpecialBait"
-
-#NPC
-WILLIE = 31574
-#ITEMS
-TARLK_EYE = 7623
-#REWARDS
-EARTH_FISHING_LURE = 7612
-#MOB
-TARLK_BASILISK = 20573
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [TARLK_EYE]
-
- def onEvent (self,event,st) :
-   htmltext = event
-   if event == "31574-03.htm" :
-     st.set("cond","1")
-     st.setState(State.STARTED)
-     st.playSound("ItemSound.quest_accept")
-   elif event == "31574-07.htm" and st.getQuestItemsCount(TARLK_EYE) == 100 :
-     htmltext = "31574-06.htm"
-     st.giveItems(EARTH_FISHING_LURE,4)
-     st.takeItems(TARLK_EYE,-1)
-     st.playSound("ItemSound.quest_finish")
-     st.unset("cond")
-     st.exitQuest(False)
-   return htmltext
-
- def onTalk (Self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-   npcId = npc.getNpcId()
-   id = st.getState()
-   cond = st.getInt("cond")
-   if id == State.COMPLETED :
-      htmltext = Quest.getAlreadyCompletedMsg(player)
-
-   elif cond == 0 :
-      if player.getLevel() >= 48 :
-         htmltext = "31574-01.htm"
-      else:
-         htmltext = "31574-02.htm"
-         st.exitQuest(1)
-   elif id == State.STARTED :
-      if st.getQuestItemsCount(TARLK_EYE) == 100 :
-         htmltext = "31574-04.htm"
-      else :
-         htmltext = "31574-05.htm"
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   partyMember = self.getRandomPartyMember(player,"1")
-   if not partyMember : return
-   st = partyMember.getQuestState(qn)
-   if st :
-      count = st.getQuestItemsCount(TARLK_EYE)
-      if st.getInt("cond") == 1 and count < 100 :
-         chance = 33 * Config.RATE_QUEST_DROP
-         numItems, chance = divmod(chance,100)
-         if self.getRandom(100) < chance : 
-            numItems += 1
-         if numItems :
-            if count + numItems >= 100 :
-               numItems = 100 - count
-               st.playSound("ItemSound.quest_middle")
-               st.set("cond","2")
-            else:
-               st.playSound("ItemSound.quest_itemget")
-            st.giveItems(TARLK_EYE,int(numItems))
-   return
-
-QUEST       = Quest(52,qn,"Willie's Special Bait")
-
-QUEST.addStartNpc(WILLIE)
-QUEST.addTalkId(WILLIE)
-
-QUEST.addKillId(TARLK_BASILISK)
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/__init__.py b/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/__init__.py
deleted file mode 100644
index c8ea20b2ee809ccf59a851f8e0a47ca6b62d5e6c..0000000000000000000000000000000000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/__init__.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# Linnaeus Special Bait - a seamless merge from Next and DooMita contributions
-import sys
-from com.l2jserver import Config
-from com.l2jserver.gameserver.model.quest import State
-from com.l2jserver.gameserver.model.quest import QuestState
-from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
-
-qn = "53_LinnaeusSpecialBait"
-
-LINNAEUS = 31577
-CRIMSON_DRAKE = 20670
-CRIMSON_DRAKE_HEART = 7624
-FLAMING_FISHING_LURE = 7613
-#Drop chance
-CHANCE = 50
-#Custom setting: wether or not to check for fishing skill level?
-#default False to require fishing skill level, any other value to ignore fishing
-#and evaluate char level only.
-ALT_IGNORE_FISHING=False
-
-def fishing_level(player):
-    if ALT_IGNORE_FISHING :
-       level=20
-    else :
-       level = player.getSkillLevel(1315)
-       effect = player.getFirstEffect(2274)
-       if effect:
-            level = int(effect.getSkill().getPower())
-    return level
-
-class Quest (JQuest):
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [CRIMSON_DRAKE_HEART]
-
- def onEvent (self,event,st):
-     htmltext = event
-     if event == "31577-1.htm":
-        st.setState(State.STARTED)
-        st.set("cond","1")
-        st.playSound("ItemSound.quest_accept")
-     elif event == "31577-3.htm":
-        cond = st.getInt("cond")
-        if cond == 2 and st.getQuestItemsCount(CRIMSON_DRAKE_HEART) == 100:
-           st.giveItems(FLAMING_FISHING_LURE, 4)
-           st.takeItems(CRIMSON_DRAKE_HEART, 100)                
-           st.exitQuest(False)
-           st.unset("cond") # we dont need it in db if quest is already State.COMPLETED
-           st.playSound("ItemSound.quest_finish")
-        else :
-           htmltext = "31577-5.htm"
-     return htmltext
-
- def onTalk (self,npc,player):
-     st = player.getQuestState(qn)
-     htmltext = Quest.getNoQuestMsg(player)
-     if not st: return htmltext
-     id = st.getState()
-     if id == State.COMPLETED:
-        htmltext = Quest.getAlreadyCompletedMsg(player)
-           
-     elif id == State.CREATED :
-        if player.getLevel() > 59 and fishing_level(player) > 19 :
-           htmltext= "31577-0.htm"
-        else:
-           st.exitQuest(1)
-           htmltext= "31577-0a.htm"
-     elif id == State.STARTED:
-        if st.getInt("cond") == 1:
-            htmltext = "31577-4.htm"
-        else :
-            htmltext = "31577-2.htm"
-     return htmltext
-
- def onKill(self,npc,player,isPet):
-     partyMember = self.getRandomPartyMember(player,"1")
-     if not partyMember : return
-     st = partyMember.getQuestState(qn)
-     if st :
-        count = st.getQuestItemsCount(CRIMSON_DRAKE_HEART)
-        if st.getInt("cond") == 1 and count < 100 :
-           chance = 33 * Config.RATE_QUEST_DROP
-           numItems, chance = divmod(chance,100)
-           if self.getRandom(100) < chance : 
-              numItems += 1
-           if numItems :
-              if count + numItems >= 100 :
-                 numItems = 100 - count
-                 st.playSound("ItemSound.quest_middle")
-                 st.set("cond","2")
-              else:
-                 st.playSound("ItemSound.quest_itemget")
-              st.giveItems(CRIMSON_DRAKE_HEART,int(numItems))
-     return
-
-QUEST       = Quest(53, qn, "Linnaeus Special Bait")
-
-QUEST.addStartNpc(LINNAEUS)
-QUEST.addTalkId(LINNAEUS)
-
-QUEST.addKillId(CRIMSON_DRAKE)
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-01.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-01.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-01.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-01.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-02.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-02.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-02.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-02.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-03.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-03.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-03.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-03.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-04.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-04.html
similarity index 80%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-04.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-04.html
index c3c9b06cff4fb1a397d6f6e611df6845d076eec4..86796349304a8947eeb0657e6b620b3a8bc87604 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-04.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-04.html
@@ -1,4 +1,4 @@
 <html><body>Fishermen's Guild Member Lanosco:<br>
 Thanks for your help. I can't get around to get the materials I need like I used to... Now I'll make the<font color="LEVEL"> bait of wind</font> for you. I use the repulsive power between the elements of water and wind. Just as water and air don't mix, things that are underwater begin to float.<br>
 Now, give me the<font color="LEVEL"> 100 essences of wind</font>!<br>
-<a action="bypass -h Quest 50_LanoscosSpecialBait 31570-07.htm">"Here they are."</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest 50_LanoscosSpecialBait 31570-07.html">"Here they are."</a></body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-05.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-05.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-05.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-05.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-06.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-06.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-06.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-06.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-07.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-07.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/50_LanoscosSpecialBait/31570-07.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/31570-07.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/Q50_LanoscosSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/Q50_LanoscosSpecialBait.java
new file mode 100644
index 0000000000000000000000000000000000000000..52258d080e6da115b01132e6d57e5fc4810803e6
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q50_LanoscosSpecialBait/Q50_LanoscosSpecialBait.java
@@ -0,0 +1,155 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q50_LanoscosSpecialBait;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+
+/**
+ * Lanosco's Special Bait (50)<br>
+ * Original Jython script by Kilkenny
+ * @author nonom
+ */
+public class Q50_LanoscosSpecialBait extends Quest
+{
+	private static final String qn = "50_LanoscosSpecialBait";
+	
+	// NPCs
+	private static final int LANOSCO = 31570;
+	private static final int SINGING_WIND = 21026;
+	
+	// Items
+	private static final int ESSENCE_OF_WIND = 7621;
+	private static final int WIND_FISHING_LURE = 7610;
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = event;
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (event)
+		{
+			case "31570-03.htm":
+				st.set("cond", "1");
+				st.setState(State.STARTED);
+				st.playSound("ItemSound.quest_accept");
+				break;
+			case "31570-07.html":
+				if ((st.getInt("cond") == 2) && (st.getQuestItemsCount(ESSENCE_OF_WIND) >= 100))
+				{
+					htmltext = "31570-06.htm";
+					st.giveItems(WIND_FISHING_LURE, 4);
+					st.takeItems(ESSENCE_OF_WIND, -1);
+					st.playSound("ItemSound.quest_finish");
+					st.exitQuest(false);
+				}
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.COMPLETED:
+				htmltext = getAlreadyCompletedMsg(player);
+				break;
+			case State.CREATED:
+				htmltext = (player.getLevel() >= 27) ? "31570-01.htm" : "31570-02.html";
+				break;
+			case State.STARTED:
+				htmltext = (st.getInt("cond") == 1) ? "31570-04.html" : "31570-05.html";
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
+	{
+		final L2PcInstance partyMember = getRandomPartyMember(player, "1");
+		if (partyMember == null)
+		{
+			return null;
+		}
+		
+		final QuestState st = partyMember.getQuestState(qn);
+		if (st == null)
+		{
+			return null;
+		}
+		
+		final long count = st.getQuestItemsCount(ESSENCE_OF_WIND);
+		if ((st.getInt("cond") == 1) && (count < 100))
+		{
+			float chance = 33 * Config.RATE_QUEST_DROP;
+			float numItems = chance / 100;
+			chance = chance % 100;
+			
+			if (getRandom(100) < chance)
+			{
+				numItems += 1;
+			}
+			if (numItems > 0)
+			{
+				if ((count + numItems) >= 100)
+				{
+					numItems = 100 - count;
+				}
+				st.set("cond", "2");
+				st.playSound("ItemSound.quest_middle");
+			}
+			else
+			{
+				st.playSound("ItemSound.quest_itemget");
+			}
+			st.giveItems(ESSENCE_OF_WIND, (int) numItems);
+		}
+		
+		return super.onKill(npc, player, isPet);
+	}
+	
+	public Q50_LanoscosSpecialBait(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		
+		addStartNpc(LANOSCO);
+		addTalkId(LANOSCO);
+		addKillId(SINGING_WIND);
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q50_LanoscosSpecialBait(50, qn, "Lanosco's Special Bait");
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-01.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-01.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-01.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-01.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-02.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-02.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-02.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-02.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-03.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-03.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-03.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-03.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-04.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-04.html
similarity index 74%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-04.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-04.html
index e38505c768451c9c028ca1478e8b970dd2c5c835..b76da7ee7cdc10a0e5f5682cc4a96b9b5cd33b70 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-04.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-04.html
@@ -1,3 +1,3 @@
 <html><body>Fishermen's Guild Member O'Fulle:<br>
 Did you recover my stolen bait materials? Awesome! Please accept this<font color="LEVEL"> bait of chill</font> from my inventory as a token of my gratitude! Please give me the<font color="LEVEL"> 100 lost bait materials</font> that you found!<br>
-<a action="bypass -h Quest 51_OFullesSpecialBait 31572-07.htm">"Here they are."</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest 51_OFullesSpecialBait 31572-07.html">"Here they are."</a></body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-05.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-05.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-05.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-05.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-06.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-06.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-06.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-06.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-07.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-07.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/51_OFullesSpecialBait/31572-07.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/31572-07.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/Q51_OFullesSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/Q51_OFullesSpecialBait.java
new file mode 100644
index 0000000000000000000000000000000000000000..89a5964e989ba03886c0a38499fde6b7dcebac73
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q51_OFullesSpecialBait/Q51_OFullesSpecialBait.java
@@ -0,0 +1,155 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q51_OFullesSpecialBait;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+
+/**
+ * O'Fulle's Special Bait (51)<br>
+ * Original Jython script by Kilkenny
+ * @author nonom
+ */
+public class Q51_OFullesSpecialBait extends Quest
+{
+	private static final String qn = "51_OFullesSpecialBait";
+	
+	// NPCs
+	private static final int OFULLE = 31572;
+	private static final int FETTERED_SOUL = 20552;
+	
+	// Items
+	private static final int LOST_BAIT = 7622;
+	private static final int ICY_AIR_LURE = 7611;
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = event;
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (event)
+		{
+			case "31572-03.htm":
+				st.set("cond", "1");
+				st.setState(State.STARTED);
+				st.playSound("ItemSound.quest_accept");
+				break;
+			case "31572-07.html":
+				if ((st.getInt("cond") == 2) && (st.getQuestItemsCount(LOST_BAIT) >= 100))
+				{
+					htmltext = "31572-06.htm";
+					st.giveItems(ICY_AIR_LURE, 4);
+					st.takeItems(LOST_BAIT, -1);
+					st.playSound("ItemSound.quest_finish");
+					st.exitQuest(false);
+				}
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.COMPLETED:
+				htmltext = getAlreadyCompletedMsg(player);
+				break;
+			case State.CREATED:
+				htmltext = (player.getLevel() >= 36) ? "31572-01.htm" : "31572-02.html";
+				break;
+			case State.STARTED:
+				htmltext = (st.getInt("cond") == 1) ? "31572-04.html" : "31572-05.html";
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
+	{
+		final L2PcInstance partyMember = getRandomPartyMember(player, "1");
+		if (partyMember == null)
+		{
+			return null;
+		}
+		
+		final QuestState st = partyMember.getQuestState(qn);
+		if (st == null)
+		{
+			return null;
+		}
+		
+		final long count = st.getQuestItemsCount(LOST_BAIT);
+		if ((st.getInt("cond") == 1) && (count < 100))
+		{
+			float chance = 33 * Config.RATE_QUEST_DROP;
+			float numItems = chance / 100;
+			chance = chance % 100;
+			
+			if (getRandom(100) < chance)
+			{
+				numItems += 1;
+			}
+			if (numItems > 0)
+			{
+				if ((count + numItems) >= 100)
+				{
+					numItems = 100 - count;
+				}
+				st.set("cond", "2");
+				st.playSound("ItemSound.quest_middle");
+			}
+			else
+			{
+				st.playSound("ItemSound.quest_itemget");
+			}
+			st.giveItems(LOST_BAIT, (int) numItems);
+		}
+		
+		return super.onKill(npc, player, isPet);
+	}
+	
+	public Q51_OFullesSpecialBait(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		
+		addStartNpc(OFULLE);
+		addTalkId(OFULLE);
+		addKillId(FETTERED_SOUL);
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q51_OFullesSpecialBait(51, qn, "O'Fulle's Special Bait");
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-01.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-01.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-01.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-01.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-02.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-02.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-02.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-02.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-03.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-03.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-03.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-03.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-04.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-04.html
similarity index 71%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-04.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-04.html
index 0dc8e971f5664dbdeefb972e012269aff7963ccc..2057d2f34332f9e6c50856205e5d0c2be65aa23c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-04.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-04.html
@@ -1,3 +1,3 @@
 <html><body>Fishermen's Guild Member Willie:<br>
 Good job, my friend! You brought everything I need to make the bait! You're really getting a good deal! Well, our guild wants to build our customer base, so we work for free! OK, give me the eyes...<br>
-<a action="bypass -h Quest 52_WilliesSpecialBait 31574-07.htm">"Here they are."</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest 52_WilliesSpecialBait 31574-07.html">"Here they are."</a></body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-05.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-05.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-05.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-05.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-06.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-06.htm
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-06.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-06.htm
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-07.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-07.html
similarity index 100%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/52_WilliesSpecialBait/31574-07.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/31574-07.html
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/Q52_WilliesSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/Q52_WilliesSpecialBait.java
new file mode 100644
index 0000000000000000000000000000000000000000..5be86e5faab5f0f1a463dd5bd66c9cf74310c1f4
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q52_WilliesSpecialBait/Q52_WilliesSpecialBait.java
@@ -0,0 +1,155 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q52_WilliesSpecialBait;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+
+/**
+ * Willie's Special Bait (52)<br>
+ * Original Jython script by Kilkenny
+ * @author nonom
+ */
+public class Q52_WilliesSpecialBait extends Quest
+{
+	private static final String qn = "52_WilliesSpecialBait";
+	
+	// NPCs
+	private static final int WILLIE = 31574;
+	private static final int TARLK_BASILISK = 20573;
+	
+	// Items
+	private static final int TARLK_EYE = 7623;
+	private static final int EARTH_FISHING_LURE = 7612;
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = event;
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (event)
+		{
+			case "31574-03.htm":
+				st.set("cond", "1");
+				st.setState(State.STARTED);
+				st.playSound("ItemSound.quest_accept");
+				break;
+			case "31574-07.html":
+				if ((st.getInt("cond") == 2) && (st.getQuestItemsCount(TARLK_EYE) >= 100))
+				{
+					htmltext = "31574-06.htm";
+					st.giveItems(EARTH_FISHING_LURE, 4);
+					st.takeItems(TARLK_EYE, -1);
+					st.playSound("ItemSound.quest_finish");
+					st.exitQuest(false);
+				}
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.COMPLETED:
+				htmltext = getAlreadyCompletedMsg(player);
+				break;
+			case State.CREATED:
+				htmltext = (player.getLevel() >= 48) ? "31574-01.htm" : "31574-02.html";
+				break;
+			case State.STARTED:
+				htmltext = (st.getInt("cond") == 1) ? "31574-04.html" : "31574-05.html";
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
+	{
+		final L2PcInstance partyMember = getRandomPartyMember(player, "1");
+		if (partyMember == null)
+		{
+			return null;
+		}
+		
+		final QuestState st = partyMember.getQuestState(qn);
+		if (st == null)
+		{
+			return null;
+		}
+		
+		final long count = st.getQuestItemsCount(TARLK_EYE);
+		if ((st.getInt("cond") == 1) && (count < 100))
+		{
+			float chance = 33 * Config.RATE_QUEST_DROP;
+			float numItems = chance / 100;
+			chance = chance % 100;
+			
+			if (getRandom(100) < chance)
+			{
+				numItems += 1;
+			}
+			if (numItems > 0)
+			{
+				if ((count + numItems) >= 100)
+				{
+					numItems = 100 - count;
+				}
+				st.set("cond", "2");
+				st.playSound("ItemSound.quest_middle");
+			}
+			else
+			{
+				st.playSound("ItemSound.quest_itemget");
+			}
+			st.giveItems(TARLK_EYE, (int) numItems);
+		}
+		
+		return super.onKill(npc, player, isPet);
+	}
+	
+	public Q52_WilliesSpecialBait(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		
+		addStartNpc(WILLIE);
+		addTalkId(WILLIE);
+		addKillId(TARLK_BASILISK);
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q52_WilliesSpecialBait(52, qn, "Willie's Special Bait");
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-0.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-0.htm
similarity index 93%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-0.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-0.htm
index a6d4c8bcaae8093abae1a5baef3529cd1b104322..f0fc98468432fa3bddcee0a96b0174bf241dd202 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-0.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-0.htm
@@ -1,4 +1,4 @@
-<html><body>Fishing Guild Member Linneus:<br>
+<html><body>Fishing Guild Member Linnaeus:<br>
 Theese days, many nobles enjoy fishing. We fishermen like to take our time while fishing, but the nobles prefer to quickly catch things other than fish.<br>
 They're quite particular about who is allowed to use the special bait, but I don't think they'd have a problem with my giving it to a fine soldier like you! Of course, I can't legally sell it to you, but if you bring me the ingredients I need, I'll make it for you for free! Don't be surprised if you pull in a treasure box when you start using this bait! It uses the power of the elements to retrieve sunken treasure! Will you bring me the materials I need?<br>
 <a action="bypass -h Quest 53_LinnaeusSpecialBait 31577-1.htm">I'll do it.</a>
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-0a.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-0a.html
similarity index 86%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-0a.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-0a.html
index 4e37b8bf56182fe49330e2987eae4aceacafd94e..84facd74c0e821bfb571d94d33ef2b73a09fdd31 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-0a.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-0a.html
@@ -1,4 +1,4 @@
-<html><body>Fishermen's Guild Member Linneus:<br>
+<html><body>Fishermen's Guild Member Linnaeus:<br>
 Not long ago while fishing, I caught several strange boxes containing assorted valuable items. They ended up being more valuable than fish!<br>
 I have a knack for finding these boxes, but I can't show you how to do it yet.<br>
 (This quest may only be undertaken by a character of level 60 or above with a fishing skill of 20.)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-1.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-1.htm
similarity index 94%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-1.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-1.htm
index 90c4e2555e12d8956f2339d495d449cff9c70e2e..bdc332dfbc62c1d52869e4d2615db6d6672e9d94 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-1.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-1.htm
@@ -1,3 +1,3 @@
-<html><body>Fishing Guild Member Linneus:<br>
+<html><body>Fishing Guild Member Linnaeus:<br>
 The special bait I'm talking about is made of<font color="LEVEL"> Crimson Drake's Heart</font> at<font color="LEVEL"> Seal of Shilen</font>. This bait is called<font color="LEVEL"> Bait of Flame</font> to contain the power of flames. And it never easy to get the materials. Besides, it requires<font color="LEVEL"> 100</font> hearts. To make even a few baits, you need that number of hearts at least. If you want to get the special bait materials, there is something you have to bear in mind. That is to use the power of flame extracted from Crimson Drake's Heart containing evil thoughts of flame for the bait. When the power of fire incompatible to water is contained in the bait and thrown in the water, things that must not stay in the water are pulled out. Ultimately, it depends on your fishing skills, but you can take out anything from the water if you had special bait with the attributes of flame.
 </body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-2.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-2.html
similarity index 93%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-2.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-2.html
index a2bebe375c9a4b0a4985daa9f60058f170146dfa..9a8035a26146c40663195e0f68648b6ac23ff170 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-2.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-2.html
@@ -1,4 +1,4 @@
-<html><body>Fishing Guild Member Linneus:<br>
+<html><body>Fishing Guild Member Linnaeus:<br>
 You already came back. Being such a famous person, you clearly have different ability. You've obtained all the bait materials to make the bait with the attributes of flame, haven't you? Frankly, I should charge you for the production itself, but wouldn't do that since you're a well-known soldier. This is also a type of advertisement. This bait utilizes the repulsive force between the elements. Like the water and fire don't mix together, the thing sunken like boxes in the water will float if you use the<font color="LEVEL"> Bait of Flame</font>. Then, will you give me the materials that you got now?<br>
 <a action="bypass -h Quest 53_LinnaeusSpecialBait 31577-3.htm">Give the hearts</a>
 </body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-3.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-3.htm
similarity index 91%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-3.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-3.htm
index aa61d47f917a6f36d9a315b28d9796ba5c0a52bf..7e13d1d802860a5b1c1db41f60d5902571872d41 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-3.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-3.htm
@@ -1,4 +1,4 @@
-<html><body>Fishing Guild Member Linneus:<br>
+<html><body>Fishing Guild Member Linnaeus:<br>
 You've obtained all the crimson drake's hearts. Please accept this<font color="LEVEL"> bait of flame</font>. You'll find it quite different than baits containing the other elements. You won't catch any fish with it, but you're more likely to discover a sunken Treasure Chest! You won't always land your catch with this bait.<br>
 This bait is mostly useless unless your fishing level is exectly 20. If it's not, you should consider giving it to someone else. Remember, bring anything you recover to me unopened!
 </body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-4.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-4.html
similarity index 80%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-4.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-4.html
index 4e8859c8c99ce33de41a82abc0a0bc38b665f4b3..7e17ba4f6634b80192a4813c308cd583eaa6cd75 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-4.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-4.html
@@ -1,3 +1,3 @@
-<html><body>Fishing Guild Member Linneus:<br>
+<html><body>Fishing Guild Member Linnaeus:<br>
 You still haven't obtained the<font color="LEVEL"> 100 crimson drake's hearts</font> I need to make the bait. Since I'm making it for free, the least you can do is bring the materials I need!
 </body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-5.htm b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-5.html
similarity index 84%
rename from L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-5.htm
rename to L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-5.html
index 9f1a36f4685e39709376a93c312d657a86a88c64..4d266408f0ca3fcc24be46a924625feb42b4418e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/53_LinnaeusSpecialBait/31577-5.htm
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/31577-5.html
@@ -1,3 +1,3 @@
-<html><body>Fishermen's Guild Member Linneus:<br>
+<html><body>Fishermen's Guild Member Linnaeus:<br>
 You said you'd brought all of the Crimson Drake's Hearts, but they are not enough. I cannot make<font color="LEVEL"> Bait of Flame</font> containing the power of flame with these. Even though you are a famous soldier, you have to bring me the right materials for making it.
 </body></html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/Q53_LinnaeusSpecialBait.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/Q53_LinnaeusSpecialBait.java
new file mode 100644
index 0000000000000000000000000000000000000000..56de589742a06cbf34c5706523c5d0859f232d16
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/Q53_LinnaeusSpecialBait/Q53_LinnaeusSpecialBait.java
@@ -0,0 +1,180 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q53_LinnaeusSpecialBait;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+
+/**
+ * Linnaeus Special Bait (53)<br>
+ * Original Jython script by Next and DooMita
+ * @author nonom
+ */
+public class Q53_LinnaeusSpecialBait extends Quest
+{
+	private static final String qn = "53_LinnaeusSpecialBait";
+	
+	// NPCs
+	private static final int LINNAEUS = 31577;
+	private static final int CRIMSON_DRAKE = 20670;
+	
+	// Items
+	private static final int CRIMSON_DRAKE_HEART = 7624;
+	private static final int FLAMING_FISHING_LURE = 7613;
+	
+	// Custom setting: wether or not to check for fishing skill level?
+	// default False to require fishing skill level, any other value to ignore fishing
+	// and evaluate char level only.
+	private static final boolean ALT_IGNORE_FISHING = false;
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = event;
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (event)
+		{
+			case "31577-1.htm":
+				st.set("cond", "1");
+				st.setState(State.STARTED);
+				st.playSound("ItemSound.quest_accept");
+				break;
+			case "31577-3.htm":
+				if ((st.getInt("cond") == 2) && (st.getQuestItemsCount(CRIMSON_DRAKE_HEART) >= 100))
+				{
+					st.giveItems(FLAMING_FISHING_LURE, 4);
+					st.takeItems(CRIMSON_DRAKE_HEART, -1);
+					st.playSound("ItemSound.quest_finish");
+					st.exitQuest(false);
+				}
+				else
+				{
+					htmltext = "31577-5.html";
+				}
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		final QuestState st = player.getQuestState(qn);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.COMPLETED:
+				htmltext = getAlreadyCompletedMsg(player);
+				break;
+			case State.CREATED:
+				htmltext = ((player.getLevel() > 59) && (fishingLevel(player) > 19)) ? "31577-0.htm" : "31577-0a.html";
+				break;
+			case State.STARTED:
+				htmltext = (st.getInt("cond") == 1) ? "31577-4.html" : "31577-2.html";
+				break;
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
+	{
+		final L2PcInstance partyMember = getRandomPartyMember(player, "1");
+		if (partyMember == null)
+		{
+			return null;
+		}
+		
+		final QuestState st = partyMember.getQuestState(qn);
+		if (st == null)
+		{
+			return null;
+		}
+		
+		final long count = st.getQuestItemsCount(CRIMSON_DRAKE_HEART);
+		if ((st.getInt("cond") == 1) && (count < 100))
+		{
+			float chance = 33 * Config.RATE_QUEST_DROP;
+			float numItems = chance / 100;
+			chance = chance % 100;
+			
+			if (getRandom(100) < chance)
+			{
+				numItems += 1;
+			}
+			if (numItems > 0)
+			{
+				if ((count + numItems) >= 100)
+				{
+					numItems = 100 - count;
+				}
+				st.set("cond", "2");
+				st.playSound("ItemSound.quest_middle");
+			}
+			else
+			{
+				st.playSound("ItemSound.quest_itemget");
+			}
+			st.giveItems(CRIMSON_DRAKE_HEART, (int) numItems);
+		}
+		
+		return super.onKill(npc, player, isPet);
+	}
+	
+	private int fishingLevel(L2PcInstance player)
+	{
+		int level = 20;
+		
+		if (!ALT_IGNORE_FISHING)
+		{
+			level = player.getSkillLevel(1315);
+			L2Effect effect = player.getFirstEffect(2274);
+			if (effect != null)
+			{
+				level = (int) effect.getSkill().getPower();
+			}
+		}
+		return level;
+	}
+	
+	public Q53_LinnaeusSpecialBait(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		
+		addStartNpc(LINNAEUS);		
+		addTalkId(LINNAEUS);
+		addKillId(CRIMSON_DRAKE);
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q53_LinnaeusSpecialBait(53, qn, "Linnaeus Special Bait");
+	}
+}