diff --git a/data/images/game/spells/cooldowns.png b/data/images/game/spells/cooldowns.png
index a8c9d64..aad66de 100644
Binary files a/data/images/game/spells/cooldowns.png and b/data/images/game/spells/cooldowns.png differ
diff --git a/data/images/game/spells/defaultspells.png b/data/images/game/spells/defaultspells.png
index d1926f3..0ec0edc 100644
Binary files a/data/images/game/spells/defaultspells.png and b/data/images/game/spells/defaultspells.png differ
diff --git a/modules/game_actionbar/actionbar.lua b/modules/game_actionbar/actionbar.lua
index 32e7b1a..477df57 100644
--- a/modules/game_actionbar/actionbar.lua
+++ b/modules/game_actionbar/actionbar.lua
@@ -29,16 +29,16 @@ function init()
   bottomPanel:moveChildToIndex(actionPanel1, 1)
   actionPanel2 = g_ui.loadUI('actionbar', bottomPanel)
   bottomPanel:moveChildToIndex(actionPanel2, 1)
-  
+
   actionConfig = g_configs.create("/actionbar.otml")
-    
+
   connect(g_game, {
     onGameStart = online,
     onGameEnd = offline,
     onSpellGroupCooldown = onSpellGroupCooldown,
     onSpellCooldown = onSpellCooldown
   })
-  
+
   if g_game.isOnline() then
     online()
   end
@@ -156,7 +156,27 @@ function setupAction(action)
     if type(config.hotkey) == 'string' and config.hotkey:len() > 0 then
       local gameRootPanel = modules.game_interface.getRootPanel()
       g_keyboard.bindKeyPress(config.hotkey, action.callback, gameRootPanel)
-      action.hotkeyLabel:setText(config.hotkey)
+      local text = config.hotkey
+      -- formatting similar to cip Tibia 12
+      local values = {
+        {"Shift", "S"},
+        {"Ctrl", "C"},
+        {"+", ""},
+        {"PageUp", "PgUp"},
+        {"PageDown", "PgDown"},
+        {"Enter", "Return"},
+        {"Insert", "Ins"},
+        {"Delete", "Del"},
+        {"Escape", "Esc"}
+      }
+      for i, v in pairs(values) do
+        text = text:gsub(v[1], v[2])
+      end
+      if text:len() > 6 then
+        text = text:sub(text:len()-3,text:len())
+        text = "..."..text
+      end
+      action.hotkeyLabel:setText(text)
     else
       action.hotkeyLabel:setText("")
     end
@@ -283,7 +303,8 @@ function actionOnMouseRelease(action, mousePosition, mouseButton)
         end
       end
       assignWindow.addButton.onClick = function()
-        updateAction(action, {hotkey=tostring(assignWindow.comboPreview.keyCombo)})
+        local text = tostring(assignWindow.comboPreview.keyCombo)
+        updateAction(action, {hotkey=text})
         assignWindow:destroy()
       end
       hotkeyAssignWindow = assignWindow
@@ -319,7 +340,7 @@ function onSpellGroupCooldown(groupId, duration)
   for index, panel in ipairs({actionPanel1, actionPanel2}) do
     for i, child in ipairs(panel.tabBar:getChildren()) do
       if child.spell and child.spell.group then
-        for group, duration in pairs(child.spell.group) do
+        for group, dur in pairs(child.spell.group) do
           if groupId == group then
             startCooldown(child, duration)
           end
@@ -343,10 +364,20 @@ function updateCooldown(action)
   local timeleft = action.cooldownTill - g_clock.millis()
   if timeleft <= 30 then
     action.cooldown:setPercent(100)
-    action.cooldownEvent = nil    
+    action.cooldownEvent = nil
+    action.cooldown:setText("")
     return
   end
   local duration = action.cooldownTill - action.cooldownStart
+  local formattedText
+  if timeleft > 60000 then
+    formattedText = math.floor(timeleft / 60000) .. "m"
+  else
+    formattedText = timeleft/1000
+    formattedText = math.floor(formattedText * 10) / 10
+    formattedText = math.floor(formattedText) .. "." .. math.floor(formattedText * 10) % 10
+  end
+  action.cooldown:setText(formattedText) 
   action.cooldown:setPercent(100 - math.floor(100 * timeleft / duration))
   action.cooldownEvent = scheduleEvent(function() updateCooldown(action) end, 30)
 end
diff --git a/modules/game_actionbar/actionbar.otui b/modules/game_actionbar/actionbar.otui
index 2f30eef..b7613d2 100644
--- a/modules/game_actionbar/actionbar.otui
+++ b/modules/game_actionbar/actionbar.otui
@@ -37,13 +37,14 @@ ActionButton < Panel
   Label
     id: hotkeyLabel
     anchors.top: parent.top
-    anchors.left: parent.left
+    anchors.right: parent.right
     margin: 2 3 3 3
     text-auto-resize: true
     text-wrap: false
     phantom: true
-    font: small-9px
-    color: yellow
+    font: cipsoftFont
+    color: white
+    background: #292A2A
 
   UIProgressRect
     id: cooldown
@@ -53,6 +54,8 @@ ActionButton < Panel
     phantom: true
     anchors.fill: parent
     margin: 1 1 1 1
+    font: verdana-11px-rounded
+    color: white
     
 Panel
   id: actionBar
diff --git a/modules/game_containers/containers.lua b/modules/game_containers/containers.lua
index aa2e6e0..0fe6c64 100644
--- a/modules/game_containers/containers.lua
+++ b/modules/game_containers/containers.lua
@@ -167,6 +167,13 @@ function onContainerOpen(container, previousContainer)
   containerWindow:setContentMinimumHeight(cellSize.height)
   containerWindow:setContentMaximumHeight(cellSize.height*layout:getNumLines())
 
+  if container:hasPages() then
+    local height = containerWindow.miniwindowScrollBar:getMarginTop() + containerWindow.pagePanel:getHeight()+17
+    if containerWindow:getHeight() < height then
+      containerWindow:setHeight(height)
+    end
+  end
+
   if not previousContainer then
     local filledLines = math.max(math.ceil(container:getItemsCount() / layout:getNumColumns()), 1)
     containerWindow:setContentHeight(filledLines*cellSize.height)
diff --git a/modules/game_cooldown/cooldown.lua b/modules/game_cooldown/cooldown.lua
index 374d1af..03212ef 100644
--- a/modules/game_cooldown/cooldown.lua
+++ b/modules/game_cooldown/cooldown.lua
@@ -185,6 +185,7 @@ function onSpellCooldown(iconId, duration)
   else
     progressRect:setPercent(0)
   end
+  local spell, profile, spellName = Spells.getSpellByIcon(iconId)
   progressRect:setTooltip(spellName)
 
   local updateFunc = function()
diff --git a/modules/gamelib/spells.lua b/modules/gamelib/spells.lua
index 2eff68c..ffc6f21 100644
--- a/modules/gamelib/spells.lua
+++ b/modules/gamelib/spells.lua
@@ -140,7 +140,22 @@ SpellInfo = {
     ['Avalanche'] =                {id = 115, words = 'adori mas frigo',       exhaustion = 2000,  premium = false, type = 'Conjure', icon = 'avalanche',              mana = 530,    level = 30, soul = 3, group = {[3] = 2000},               vocations = {2, 6}},
     ['Stone Shower'] =             {id = 116, words = 'adori mas tera',        exhaustion = 2000,  premium = false, type = 'Conjure', icon = 'stoneshower',            mana = 430,    level = 28, soul = 3, group = {[3] = 2000},               vocations = {2, 6}},
     ['Thunderstorm'] =             {id = 117, words = 'adori mas vis',         exhaustion = 2000,  premium = false, type = 'Conjure', icon = 'thunderstorm',           mana = 430,    level = 28, soul = 3, group = {[3] = 2000},               vocations = {1, 5}},
-    ['Holy Missile'] =             {id = 130, words = 'adori san',             exhaustion = 2000,  premium = false, type = 'Conjure', icon = 'holymissile',            mana = 350,    level = 27, soul = 3, group = {[3] = 2000},               vocations = {3, 7}}
+    ['Holy Missile'] =             {id = 130, words = 'adori san',             exhaustion = 2000,  premium = false, type = 'Conjure', icon = 'holymissile',            mana = 350,    level = 27, soul = 3, group = {[3] = 2000},               vocations = {3, 7}},
+    -- newest tibia spells
+    ['Summon Paladin Familiar'] =  {id = 171, words = 'utevo gran res sac',    exhaustion = 1800000,premium = true, type = 'Instant', icon = 'summonpaladinfamiliar',  mana = 2000,   level = 200,soul = 0, group = {[3] = 2000},               vocations = {3, 7}},
+    ['Summon Knight Familiar'] =   {id = 170, words = 'utevo gran res eq',     exhaustion = 1800000,premium = true, type = 'Instant', icon = 'summonknightfamiliar',   mana = 1000,   level = 200,soul = 0, group = {[3] = 2000},               vocations = {3, 7}},
+    ['Summon Druid Familiar'] =    {id = 172, words = 'utevo gran res dru',    exhaustion = 1800000,premium = true, type = 'Instant', icon = 'summondruidfamiliar',    mana = 3000,   level = 200,soul = 0, group = {[3] = 2000},              vocations = {3, 7}},
+    ['Summon Sorcerer Familiar'] = {id = 173, words = 'utevo gran res eq',     exhaustion = 1800000,premium = true, type = 'Instant', icon = 'summonsorcererfamiliar', mana = 3000,   level = 200,soul = 0, group = {[3] = 2000},                vocations = {3, 7}},
+    ['Chivalrous Challenge'] =     {id = 101, words = "exeta amp res",         exhaustion = 2000,  premium = true,  type = 'Instant', icon = 'chivalrouschallange',    mana = 80,     level = 150,soul = 0, group = {[3] = 2000},               vocations = {8}},
+    ['Fair Wound Cleansing'] =     {id = 102, words = 'exura med ico',         exhaustion = 1000,  premium = true,  type = 'Instant', icon = 'fairwoundcleansing',     mana = 90,     level = 300,soul = 0, group = {[2] = 1000},               vocations = {8}},
+    ['Conjure Wand of Darkness'] = {id = 92, words = 'exevo gran mort',        exhaustion = 1800000,premium = true, type = 'Conjure', icon = 'conjurewandofdarkness',  mana = 250,    level = 41, soul = 0, group = {[3] = 2000},               vocations = {1, 5}},
+    ['Expose Weakness'] =          {id = 106, words = 'exori moe',             exhaustion = 12000, premium = true,  type = 'Instant', icon = 'exposeweakness',        mana = 400,    level = 275,soul = 0, group = {[5] = 12000, [3] = 2000},  vocations = {1, 5}},
+    ['Sap Strenght'] =             {id = 105, words = 'exori kor',             exhaustion = 12000, premium = true,  type = 'Instant', icon = 'sapstrenght',           mana = 300,    level = 175,soul = 0, group = {[5] = 12000, [3] = 2000},  vocations = {1, 5}},
+    ['Great Fire Wave'] =          {id = 100, words = 'exevo gran flam hur',   exhaustion = 4000,  premium = true,  type = 'Instant', icon = 'greatfirewave',         mana = 120,    level = 38, soul = 0, group = {[1] = 2000},               vocations = {1, 5}},
+    ['Restoration'] =              {id = 103, words = "exura max vita",        exhaustion = 6000,  premium = true,  type = 'Instant', icon = 'restoration',            mana = 260,    level = 300,soul = 0, group = {[2] = 1000},               vocations = {1, 2, 5, 6}},
+    ["Nature's Embrace"] =         {id = 101, words = 'exura gran sio',        exhaustion = 60000, premium = true,  type = 'Instant', icon = 'naturesembrace',         mana = 400,    level = 300,soul = 0, group = {[2] = 1000},               vocations = {2, 6}},
+    ['Divine Dazzle'] =            {id = 101, words = 'exana amp res',         exhaustion = 16000, premium = true,  type = 'Instant', icon = 'divinedazzle',           mana = 80,     level = 250,soul = 0, group = {[3] = 2000},               vocations = {3, 7}},
+
   }--[[,
 
   ['Sample'] = {
@@ -153,8 +168,23 @@ SpellInfo = {
 }
 
 -- ['const_name'] =       {client_id, TFS_id}
--- Conversion from TFS icon id to the id used by client (icons.png order)
+-- Conversion from TFS icon id to the id used by client (icons.png order)  
 SpellIcons = {
+  -- new tibia spells, server owners - you will probably need to adjust TFS_id
+  ['summonsorcererfamiliar']    = {130, 173},
+  ['summondruidfamiliar']       = {129, 172},
+  ['summonpaladinfamiliar']     = {127, 171},
+  ['summonknightfamiliar']      = {128, 170},
+  ['exposeweakness']            = {134, 106},
+  ['sapstrenght']               = {135, 105},
+  ['restoration']               = {137, 103},
+  ['fairwoundcleansing']        = {132, 102},
+  ['chivalrouschallange']       = {131, 101},
+  ["naturesembrace"]            = {138, 101},
+  ['divinedazzle']              = {139, 101},
+  ['greatfirewave']             = {136, 100},
+  ['conjurewandofdarkness']     = {133, 92},
+  -- old spells
   ['intenserecovery']           = {16, 160},
   ['recovery']                  = {15, 159},
   ['intensewoundcleansing']     = {4, 158},
@@ -291,7 +321,7 @@ SpellIcons = {
   ['intensehealingrune']        = {74, 4},
   ['ultimatehealing']           = {1, 3},
   ['intensehealing']            = {7, 2},
-  ['lighthealing']              = {6, 1}
+  ['lighthealing']              = {6, 1},
 }
 
 VocationNames = {
@@ -309,7 +339,8 @@ SpellGroups = {
   [1] = 'Attack',
   [2] = 'Healing',
   [3] = 'Support',
-  [4] = 'Special'
+  [4] = 'Special',
+  [5] = 'Cripple'
 }
 
 Spells = {}
@@ -438,4 +469,4 @@ function Spells.getImageClip(id, profile)
     .. ((math.ceil(id/12)-1)*SpelllistSettings[profile].iconSize.height) .. ' ' 
     .. SpelllistSettings[profile].iconSize.width .. ' ' 
     .. SpelllistSettings[profile].iconSize.height
-end
\ No newline at end of file
+end
diff --git a/otclient_dx.exe b/otclient_dx.exe
index 82c6064..c920dac 100644
Binary files a/otclient_dx.exe and b/otclient_dx.exe differ
diff --git a/otclient_gl.exe b/otclient_gl.exe
index ffabd1a..a1263ad 100644
Binary files a/otclient_gl.exe and b/otclient_gl.exe differ
diff --git a/otclient_mac b/otclient_mac
index 28806c5..8f2ab93 100644
Binary files a/otclient_mac and b/otclient_mac differ
diff --git a/otclientv8.apk b/otclientv8.apk
index e70e892..753f6f1 100644
Binary files a/otclientv8.apk and b/otclientv8.apk differ