diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt
index d156682c74..53b65bcdb1 100644
--- a/db/pre-re/skill_cast_db.txt
+++ b/db/pre-re/skill_cast_db.txt
@@ -1673,6 +1673,14 @@
 3017,500,0,0,300000,0,0,0
 //-- KO_DOHU_KOUKAI
 3018,500,0,0,300000,0,0,0
+//-- KO_KAIHOU
+3019,1000,0,0,0,0,0,0
+//-- KO_ZENKAI
+3020,1000,0,0,10000,10000,0,0
+//-- KO_GENWAKU
+3021,500,0,0,5000,0,0,0
+//-- KO_IZAYOI
+3022,0,0,0,30000:45000:60000:75000:90000,0,60000,0
 //==========================================
 
 //===== Homunculus Skills ==================
diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt
index 19645896c3..3c9abf906d 100644
--- a/db/pre-re/skill_db.txt
+++ b/db/pre-re/skill_db.txt
@@ -1026,7 +1026,11 @@
 3015,0,6,4,3,0x1,0,1,1,no,0,0,0,none,0,		KO_KAHU_ENTEN,Kahu Enten
 3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,		KO_HYOUHU_HUBUKI,Hyouhu Hubuki
 3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,		KO_KAZEHU_SEIRAN,Kazehu Seiran
-3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,		KO_DOHU_KOUKAI,Dohu Koukai
+3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,		KO_DOHU_KOUKAI,Dohu Koukai	
+3019,11,6,1,0,0,0,5,0,no,0,0,0,weapon,0,	KO_KAIHOU,Technique Kaihou
+3020,7,6,2,0,0,0,1,3,yes,0,0,0,magic,0,		KO_ZENKAI,Zenkai
+3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,	KO_GENWAKU,Genwaku
+3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,		KO_IZAYOI,Izayoi
 
 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,	HLIF_HEAL,Healing Touch
 8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0,	HLIF_AVOID,Avoid
diff --git a/db/pre-re/skill_require_db.txt b/db/pre-re/skill_require_db.txt
index 9a36a896a7..edea390077 100644
--- a/db/pre-re/skill_require_db.txt
+++ b/db/pre-re/skill_require_db.txt
@@ -788,7 +788,7 @@
 //****
 // Kagerou/Oboro
 3001,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_YAMIKUMO#Yamikumo#
-3004,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_JYUMONJIKIRI#Cross Strike#
+3004,0,0,10:12:14:16:18,0,0,0,25:26:28,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_JYUMONJIKIRI#Cross Strike#
 3005,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_SETSUDAN#Soul Sever#
 3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_BAKURETSU#Bakuretsu Kunai#
 3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HAPPOKUNAI#Happo Kunai#
@@ -803,6 +803,10 @@
 3016,0,0,20,0,0,0,99,0,0,none,0,6513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HYOUHU_HUBUKI#Hyouhu Hubuki#
 3017,0,0,20,0,0,0,99,0,0,none,0,6514,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAZEHU_SEIRAN#Kazehu Seiran#
 3018,0,0,20,0,0,0,99,0,0,none,0,6515,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_DOHU_KOUKAI#Dohu Koukai#
+3019,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAIHOU#Technique Kaihou#
+3020,0,0,30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_ZENKAI#Zenkai#
+3021,0,0,40:44:48:52:56,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_GENWAKU#Genwaku#
+3022,0,0,70:75:80:85:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_IZAYOI#Izayoi#
 
 10010,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_BATTLEORDER##
 10011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_REGENERATION##
diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt
index a0d0f48905..37f2eb3177 100644
--- a/db/pre-re/skill_unit_db.txt
+++ b/db/pre-re/skill_unit_db.txt
@@ -151,6 +151,7 @@
 3006,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_BAKURETSU
 3008,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_MUCHANAGE
 3009,0x86,    ,  0, 3, 500,enemy, 0x018	//KO_HUUMARANKA
+3020,0xf8,    ,  0, 3, 100,all, 0x018	//KO_ZENKAI
 //3010,0xfc,    ,  0, 2,1000,enemy, 0x022	//KO_MAKIBISHI
 
 8208,0x86,    ,  0, 2,1000,enemy, 0x080	//MA_SHOWER
diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt
index 3b59e7c35a..2278444b06 100644
--- a/db/re/skill_cast_db.txt
+++ b/db/re/skill_cast_db.txt
@@ -1673,6 +1673,14 @@
 3017,500,0,0,300000,0,0,0
 //-- KO_DOHU_KOUKAI
 3018,500,0,0,300000,0,0,0
+//-- KO_KAIHOU
+3019,1000,0,0,0,0,0,0
+//-- KO_ZENKAI
+3020,1000,0,0,10000,10000,0,0
+//-- KO_GENWAKU
+3021,500,0,0,5000,0,0,0
+//-- KO_IZAYOI
+3022,0,0,0,30000:45000:60000:75000:90000,0,60000,0
 //==========================================
 
 //===== Homunculus Skills ==================
diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt
index d2304725af..47ea9b5b12 100644
--- a/db/re/skill_db.txt
+++ b/db/re/skill_db.txt
@@ -1028,6 +1028,10 @@
 3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,		KO_HYOUHU_HUBUKI,Hyouhu Hubuki
 3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,		KO_KAZEHU_SEIRAN,Kazehu Seiran
 3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,		KO_DOHU_KOUKAI,Dohu Koukai	
+3019,11,6,1,0,0,0,5,0,no,0,0,0,weapon,0,	KO_KAIHOU,Technique Kaihou
+3020,7,6,2,0,0,0,1,3,yes,0,0,0,magic,0,		KO_ZENKAI,Zenkai
+3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,	KO_GENWAKU,Genwaku
+3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,		KO_IZAYOI,Izayoi
 
 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,	HLIF_HEAL,Healing Touch
 8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0,	HLIF_AVOID,Avoid
diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt
index ecbb3da9a1..ce91598595 100644
--- a/db/re/skill_require_db.txt
+++ b/db/re/skill_require_db.txt
@@ -790,7 +790,7 @@
 //****
 // Kagerou/Oboro
 3001,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_YAMIKUMO#Yamikumo#
-3004,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_JYUMONJIKIRI#Cross Strike#
+3004,0,0,10:12:14:16:18,0,0,0,25:26:28,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_JYUMONJIKIRI#Cross Strike#
 3005,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_SETSUDAN#Soul Sever#
 3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_BAKURETSU#Bakuretsu Kunai#
 3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HAPPOKUNAI#Happo Kunai#
@@ -805,6 +805,10 @@
 3016,0,0,20,0,0,0,99,0,0,none,0,6513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HYOUHU_HUBUKI#Hyouhu Hubuki#
 3017,0,0,20,0,0,0,99,0,0,none,0,6514,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAZEHU_SEIRAN#Kazehu Seiran#
 3018,0,0,20,0,0,0,99,0,0,none,0,6515,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_DOHU_KOUKAI#Dohu Koukai#
+3019,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAIHOU#Technique Kaihou#
+3020,0,0,30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_ZENKAI#Zenkai#
+3021,0,0,40:44:48:52:56,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_GENWAKU#Genwaku#
+3022,0,0,70:75:80:85:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_IZAYOI#Izayoi#
 
 10010,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_BATTLEORDER##
 10011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GD_REGENERATION##
diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt
index 0e247ccf5d..d59f0a60f2 100644
--- a/db/re/skill_unit_db.txt
+++ b/db/re/skill_unit_db.txt
@@ -153,6 +153,7 @@
 3006,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_BAKURETSU
 3008,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_MUCHANAGE
 3009,0x86,    ,  0, 3, 500,enemy, 0x018	//KO_HUUMARANKA
+3020,0xf8,    ,  0, 3, 100,all, 0x018	//KO_ZENKAI
 //3010,0xfc,    ,  0, 2,1000,enemy, 0x022	//KO_MAKIBISHI
 
 8020,0xf5,    ,  0, 3,2300:2100:1900:1700:1500,enemy,   0x018	//MH_POISON_MIST
diff --git a/src/map/battle.c b/src/map/battle.c
index e1d34d7e04..f06ab22929 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -1422,7 +1422,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 		s_ele_ = sstatus->lhw.ele;
 		if( sd ){ //Summoning 10 talisman will endow your weapon.
 			ARR_FIND(1, 6, i, sd->talisman[i] >= 10);
-			if( i < 5) s_ele = s_ele_ = i;
+			if( i < 5 ) s_ele = s_ele_ = i;
 		}
 		if( flag.arrow && sd && sd->bonus.arrow_ele )
 			s_ele = sd->bonus.arrow_ele;
@@ -1778,6 +1778,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 				skillratio += sc->data[SC_MAXOVERTHRUST]->val2;
 			if(sc->data[SC_BERSERK])
 				skillratio += 100;
+			if(sc->data[SC_ZENKAI] && sstatus->rhw.ele == sc->data[SC_ZENKAI]->val2 )
+				skillratio += sc->data[SC_ZENKAI]->val1 * 2;
 		}
 		if( !skill_num )
 		{
@@ -2599,6 +2601,16 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 						status_change_end(target,SC_SPIRIT,INVALID_TIMER);
 					}
 					break;
+				case KO_KAIHOU:
+					if( sd ){
+						ARR_FIND(1, 6, i, sd->talisman[i] > 0);
+						if( i < 5 ){
+							s_ele = i;
+							ATK_ADDRATE(100 * sd->talisman[i]);// +100% custom value.
+							pc_del_talisman(sd, sd->talisman[i], i);
+						}
+					}
+					break;
 			}
 		}
 		//Div fix.
@@ -3339,8 +3351,8 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 		if (s_ele == -1){ // pl=-1 : the skill takes the weapon's element
 			s_ele = sstatus->rhw.ele;
 			if( sd ){ //Summoning 10 talisman will endow your weapon
-				ARR_FIND(1, 6, i, sd->talisman[i] > 0);
-				if( i < 5) s_ele = i;
+				ARR_FIND(1, 6, i, sd->talisman[i] >= 10);
+				if( i < 5 ) s_ele = i;
 			}
 		}else if (s_ele == -2) //Use status element
 			s_ele = status_get_attack_sc_element(src,status_get_sc(src));
diff --git a/src/map/pc.h b/src/map/pc.h
index f7a8217681..b4f10e02f6 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -643,7 +643,7 @@ enum e_pc_permission {
 
 //Weapon check considering dual wielding.
 #define pc_check_weapontype(sd, type) ((type)&((sd)->status.weapon < MAX_WEAPON_TYPE? \
-	1<<(sd)->status.weapon:(1<<(sd)->weapontype1)|(1<<(sd)->weapontype2)))
+	1<<(sd)->status.weapon:(1<<(sd)->weapontype1)|(1<<(sd)->weapontype2)|(1<<(sd)->status.weapon)))
 //Checks if the given class value corresponds to a player class. [Skotlex]
 //JOB_NOVICE isn't checked for class_ is supposed to be unsigned
 #define pcdb_checkid_sub(class_) \
diff --git a/src/map/skill.c b/src/map/skill.c
index 1b1f8a510f..0b2d91287c 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -3437,6 +3437,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 	case MH_STAHL_HORN:
 	case KO_JYUMONJIKIRI:
 	case KO_SETSUDAN:
+	case KO_KAIHOU:
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
 	break;
 
@@ -8721,6 +8722,29 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
 		break;
 
+	case KO_GENWAKU:
+		{
+			int x = src->x, y = src->y;
+			if (unit_movepos(src,bl->x,bl->y,0,0)) {
+				clif_skill_nodamage(src,src,skillid,skilllv,1);
+				clif_slide(src,bl->x,bl->y) ;
+				sc_start(src,SC_CONFUSION,80,skilllv,skill_get_time(skillid,skilllv));
+				if (unit_movepos(bl,x,y,0,0))
+				{
+					clif_skill_damage(bl,bl,tick, status_get_amotion(src), 0, -30000, 1, skillid, -1, 6);
+					clif_slide(bl,x,y) ;
+					sc_start(bl,SC_CONFUSION,80,skilllv,skill_get_time(skillid,skilllv));
+				}
+			}
+		}
+		break;
+
+	case KO_IZAYOI:
+		clif_skill_nodamage(src,bl,skillid,skilllv,
+			sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
+		clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+		break;
+
 	default:
 		if( skillid >= HM_SKILLBASE && skillid <= HM_SKILLBASE + MAX_HOMUNSKILL ) {
 			if( src->type == BL_HOM && ((TBL_HOM*)src)->master->fd )
@@ -9443,6 +9467,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
 	case KO_HUUMARANKA:
 	case KO_MUCHANAGE:
 	case KO_BAKURETSU:
+	case KO_ZENKAI:
 	//case KO_MAKIBISHI:
 		flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
 	case GS_GROUNDDRIFT: //Ammo should be deleted right away.
@@ -10481,7 +10506,19 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
 		if( flag&1 )
 			limit = 3000;
 		val3 = (x<<16)|y;
-		break;			
+		break;	
+	case KO_ZENKAI:
+		if( sd ){
+			ARR_FIND(1, 6, i, sd->talisman[i] > 0);
+			if( i < 5 ){
+				val1 = sd->talisman[i]; // no. of aura
+				val2 = i; // aura type
+				limit += val1 * 1000;
+				subunt = i - 1;
+				pc_del_talisman(sd, sd->talisman[i], i);
+			}
+		}
+		break;
 	}
 
 	nullpo_retr(NULL, group=skill_initunitgroup(src,layout->count,skillid,skilllv,skill_get_unit_id(skillid,flag&1)+subunt, limit, interval));
@@ -11459,8 +11496,36 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 		case UNT_FIRE_MANTLE:
 			if( battle_check_target(&src->bl, bl, BCT_ENEMY) )
 				skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-			break;			
+			break;	
 
+		case UNT_ZENKAI_WATER:
+		case UNT_ZENKAI_GROUND:
+		case UNT_ZENKAI_FIRE:
+		case UNT_ZENKAI_WIND:
+			if( battle_check_target(&src->bl,bl,BCT_ENEMY) > 0 ){
+				switch( sg->unit_id ){
+					case UNT_ZENKAI_WATER:
+						sc_start(bl, SC_CRYSTALIZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						sc_start(bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						sc_start(bl, SC_FREEZING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						break;
+					case UNT_ZENKAI_GROUND:
+						sc_start(bl, SC_STONE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						sc_start(bl, SC_POISON, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						break;
+					case UNT_ZENKAI_FIRE:
+						sc_start(bl, SC_BURNING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						break;
+					case UNT_ZENKAI_WIND:
+						sc_start(bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						sc_start(bl, SC_SLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						sc_start(bl, SC_DEEPSLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); 
+						break;
+				}
+			}else
+				sc_start2(bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv));
+			break;
+	
 	}
 
 	if (bl->type == BL_MOB && ss != bl)
@@ -12534,6 +12599,14 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
 				}
 			}
 			break;
+		case KO_KAIHOU:
+		case KO_ZENKAI:
+			ARR_FIND(1, 6, i, sd->talisman[i] > 0);
+			if( i > 4 ) { 
+				clif_skill_fail(sd,skill,USESKILL_FAIL_LEVEL,0);
+				return 0;
+			}
+			break;
 	}
 
 	switch(require.state) {
@@ -13244,6 +13317,8 @@ int skill_castfix_sc (struct block_list *bl, int time, int skill_id, int skill_l
 		}
 		if (sc->data[SC_POEMBRAGI])
 			time -= time * sc->data[SC_POEMBRAGI]->val2 / 100;
+		if (sc->data[SC_IZAYOI])
+			time -= time * 50 / 100;
 #ifdef RENEWAL_CAST
 		if( sc->data[SC__LAZINESS] )
 			fixed += fixed * sc->data[SC__LAZINESS]->val2 / 100;
@@ -13254,6 +13329,8 @@ int skill_castfix_sc (struct block_list *bl, int time, int skill_id, int skill_l
 			fixed -= fixed * sc->data[SC_SECRAMENT]->val2 / 100;
 		if( sc->data[SC_MANDRAGORA] && (skill_id >= SM_BASH && skill_id <= RETURN_TO_ELDICASTES) )
 			fixed += 2000;
+		if (sc->data[SC_IZAYOI]  && (skill_id >= NJ_TOBIDOUGU && skill_id <= NJ_ISSEN))
+			fixed = 0;
 #endif
 	}
 #ifdef RENEWAL_CAST
diff --git a/src/map/status.c b/src/map/status.c
index 987de30fea..a89253a2d2 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -716,6 +716,8 @@ void initChangeTables(void) {
 	set_sc( KO_MEIKYOUSISUI		, SC_MEIKYOUSISUI		 , SI_MEIKYOUSISUI		   , SCB_NONE );
 	set_sc( KO_KYOUGAKU			, SC_KYOUGAKU			 , SI_KYOUGAKU			   , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK );
 	add_sc( KO_JYUSATSU			, SC_CURSE		  );
+	set_sc( KO_ZENKAI			, SC_ZENKAI				 , SI_ZENKAI			   , SCB_NONE );
+	set_sc( KO_IZAYOI			, SC_IZAYOI				 , SI_IZAYOI			   , SCB_MATK );
 	
 	add_sc( MH_STAHL_HORN		 , SC_STUN            );
 	set_sc( MH_ANGRIFFS_MODUS	 , SC_ANGRIFFS_MODUS  , SI_ANGRIFFS_MODUS	, SCB_BATK|SCB_WATK|SCB_DEF|SCB_FLEE );
@@ -4501,7 +4503,9 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan
 	if(sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3)
 		matk += 50;	
 	if(sc->data[SC_ODINS_POWER])
-		matk += 70;
+		matk += 70;	
+	if(sc->data[SC_IZAYOI])
+		matk += 50 * sc->data[SC_IZAYOI]->val1;
 
 	return (unsigned short)cap_value(matk,0,USHRT_MAX);
 }
@@ -6291,9 +6295,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 	case SC_SLEEP:
 	case SC_STUN:
 	case SC_FREEZING:
+	case SC_CRYSTALIZE:
 		if (sc->opt1)
 			return 0; //Cannot override other opt1 status changes. [Skotlex]
-		if((type == SC_FREEZE || type == SC_FREEZING) && sc->data[SC_WARMER])
+		if((type == SC_FREEZE || type == SC_FREEZING || type == SC_CRYSTALIZE) && sc->data[SC_WARMER])
 			return 0; //Immune to Frozen and Freezing status if under Warmer status. [Jobbie]
 	break;
 		
@@ -8263,7 +8268,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			val2 = 2*val1 + rand()%val1;
 			clif_status_change(bl,SI_ACTIVE_MONSTER_TRANSFORM,1,0,1002,0,0); // Temporarily shows Poring need official [malufett]
 			break;
-
+		case SC_IZAYOI:
+			val2 = tick/1000;
+			tick_time = 1000;
+			break;
 		default:
 			if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 )
 			{	//Status change with no calc, no icon, and no skill associated...? 
@@ -10199,6 +10207,16 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
 			return 0;
 		}
 		break;
+	case SC_IZAYOI:
+	case SC_KAGEMUSYA:
+		if( --(sce->val2) > 0 )
+		{ 
+			if(!status_charge(bl, 0, 1))
+				break;
+			sc_timer_next(1000+tick, status_change_timer, bl->id, data);
+			return 0;
+		}
+		break;
 	}
 
 	// default for all non-handled control paths is to end the status
diff --git a/src/map/status.h b/src/map/status.h
index 8b27af3288..0c684bcf95 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -628,6 +628,7 @@ typedef enum sc_type {
 	SC_JYUMONJIKIRI,
 	SC_KYOUGAKU,
 	SC_IZAYOI,
+	SC_ZENKAI,
 	SC_KAGEHUMI,
 	SC_KYOMU,
 	SC_KAGEMUSYA,