diff --git a/src/engine/gameManager/MovementManager.java b/src/engine/gameManager/MovementManager.java
index b66ba50a..eafc4192 100644
--- a/src/engine/gameManager/MovementManager.java
+++ b/src/engine/gameManager/MovementManager.java
@@ -18,7 +18,6 @@ import engine.exception.MsgSendException;
 import engine.job.JobContainer;
 import engine.job.JobScheduler;
 import engine.jobs.ChangeAltitudeJob;
-import engine.jobs.FlightJob;
 import engine.math.Bounds;
 import engine.math.Vector3f;
 import engine.math.Vector3fImmutable;
@@ -339,61 +338,7 @@ public enum MovementManager {
 
 	}
 
-	//Update for when the character is in flight
-	public static void updateFlight(PlayerCharacter pc, ChangeAltitudeMsg msg, int duration) {
-		if (pc == null)
-			return;
-
-		// clear flight timer job as we are about to update stuff and submit a new job
-		pc.clearTimer(flightTimerJobName);
-
-		if (!pc.isActive()) {
-			pc.setAltitude(0);
-			pc.setDesiredAltitude(0);
-			pc.setTakeOffTime(0);
-			return;
-		}
-
-		// Check to see if we are mid height change
-		JobContainer cjc = pc.getTimers().get(changeAltitudeTimerJobName);
-		if (cjc != null) {
-			addFlightTimer(pc, msg, MBServerStatics.FLY_FREQUENCY_MS);
-			return;
-		}
-
-		// Altitude is zero, do nothing
-		if (pc.getAltitude() < 1)
-			return;
 
-		//make sure player is still allowed to fly
-		boolean canFly = false;
-		PlayerBonuses bonus = pc.getBonuses();
-
-		if (bonus != null && !bonus.getBool(ModType.NoMod, SourceType.Fly) && bonus.getBool(ModType.Fly, SourceType.None) && pc.isAlive())
-			canFly = true;
-
-		// if stam less that 2 - time to force a landing
-		if (pc.getStamina() < 10f || !canFly) {
-
-			// dont call stop movement here as we want to
-			// preserve endloc
-			//pc.stopMovement();
-			// sync world location
-			pc.setLoc(pc.getLoc());
-			// force a landing
-			msg.setStartAlt(pc.getAltitude());
-			msg.setTargetAlt(0);
-			msg.setAmountToMove(pc.getAltitude());
-			msg.setUp(false);
-			DispatchMessage.dispatchMsgToInterestArea(pc, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false);
-			MovementManager.addChangeAltitudeTimer(pc, msg.getStartAlt(), msg.getTargetAlt(), (int) (MBServerStatics.HEIGHT_CHANGE_TIMER_MS * pc.getAltitude()));
-			pc.setAltitude(msg.getStartAlt() - 10);
-
-		} else //Add a new flight timer to check stam / force land
-			if (pc.getAltitude() > 0)
-				addFlightTimer(pc, msg, MBServerStatics.FLY_FREQUENCY_MS);
-
-	}
 
 	public static void finishChangeAltitude(AbstractCharacter ac, float targetAlt) {
 
@@ -529,27 +474,6 @@ public enum MovementManager {
 			member.setEndLoc(destination);
 		}
 	}
-
-	//Getting rid of flgith timer.
-
-	public static void addFlightTimer(PlayerCharacter pc, ChangeAltitudeMsg msg, int duration) {
-		if (pc == null || pc.getTimers() == null)
-			return;
-		if (!pc.getTimers().containsKey(flightTimerJobName)) {
-			FlightJob ftj = new FlightJob(pc, msg, duration);
-			JobContainer jc = JobScheduler.getInstance().scheduleJob(ftj, duration);
-			pc.getTimers().put(flightTimerJobName, jc);
-		}
-	}
-
-	public static void addChangeAltitudeTimer(PlayerCharacter pc, float startAlt, float targetAlt, int duration) {
-		if (pc == null || pc.getTimers() == null)
-			return;
-		ChangeAltitudeJob catj = new ChangeAltitudeJob(pc, startAlt, targetAlt);
-		JobContainer jc = JobScheduler.getInstance().scheduleJob(catj, duration);
-		pc.getTimers().put(changeAltitudeTimerJobName, jc);
-	}
-
 	
 	public static void translocate(AbstractCharacter teleporter, Vector3fImmutable targetLoc, Regions region) {
 
@@ -557,15 +481,10 @@ public enum MovementManager {
 		if (targetLoc == null)
 			return;
 
-
 		Vector3fImmutable oldLoc = new Vector3fImmutable(teleporter.getLoc());
-			
-		
+
 			teleporter.stopMovement(targetLoc);
-			
 			teleporter.setRegion(region);
-		
-	
 
 			//mobs ignore region sets for now.
 			if (teleporter.getObjectType().equals(GameObjectType.Mob)){
@@ -588,17 +507,11 @@ public enum MovementManager {
 	
 	public static void translocateToObject(AbstractCharacter teleporter, AbstractWorldObject worldObject) {
 
-
-		
 		Vector3fImmutable targetLoc = teleporter.getLoc();
 
 		Vector3fImmutable oldLoc = new Vector3fImmutable(teleporter.getLoc());
 
-			teleporter.stopMovement(teleporter.getLoc());
-
-		
-		
-	
+		teleporter.stopMovement(teleporter.getLoc());
 
 			//mobs ignore region sets for now.
 			if (teleporter.getObjectType().equals(GameObjectType.Mob)){
@@ -609,6 +522,7 @@ public enum MovementManager {
 				DispatchMessage.dispatchMsgToInterestArea(oldLoc, teleporter, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, false, false);
 				return;
 			}
+
 		boolean collide = false;
 		int maxFloor = -1;
 		int buildingID = 0;
@@ -619,6 +533,7 @@ public enum MovementManager {
 			if (collide)
 				break;
 		}
+
 		if (!collide) {
 			teleporter.setInBuildingID(0);
 			teleporter.setInBuilding(-1);
@@ -633,7 +548,6 @@ public enum MovementManager {
 			}
 		}
 
-
 		TeleportToPointMsg msg = new TeleportToPointMsg(teleporter, targetLoc.getX(), targetLoc.getY(), targetLoc.getZ(), 0, -1, -1);
 		//we shouldnt need to send teleport message to new area, as loadjob should pick it up.
 	//	DispatchMessage.dispatchMsgToInterestArea(teleporter, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false);
diff --git a/src/engine/jobs/FlightJob.java b/src/engine/jobs/FlightJob.java
deleted file mode 100644
index 1bd9366c..00000000
--- a/src/engine/jobs/FlightJob.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ .
-// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
-// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
-// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
-// ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀
-//      Magicbane Emulator Project © 2013 - 2022
-//                www.magicbane.com
-
-
-package engine.jobs;
-
-import engine.gameManager.MovementManager;
-import engine.job.AbstractScheduleJob;
-import engine.net.client.msg.ChangeAltitudeMsg;
-import engine.objects.PlayerCharacter;
-
-public class FlightJob extends AbstractScheduleJob {
-
-    private final PlayerCharacter pc;
-    private final ChangeAltitudeMsg msg;
-    private final int duration;
-
-    public FlightJob(PlayerCharacter pc, ChangeAltitudeMsg msg, int duration) {
-        super();
-        this.msg = msg;
-        this.duration = duration;
-        this.pc = pc;
-    }
-
-    @Override
-    protected void doJob() {
-        if (this.pc != null && this.msg != null)
-            MovementManager.updateFlight(pc, msg, duration);
-    }
-
-    @Override
-    protected void _cancelJob() {
-    }
-
-}
diff --git a/src/engine/objects/PlayerCharacter.java b/src/engine/objects/PlayerCharacter.java
index ef6f623a..c7a55f57 100644
--- a/src/engine/objects/PlayerCharacter.java
+++ b/src/engine/objects/PlayerCharacter.java
@@ -4781,8 +4781,11 @@ public void dismissNecroPets() {
 			}finally{
 				this.updateLock.writeLock().unlock();
 			}
-		}
+			//temp removal
+			if(AbstractCharacter.CanFly(this) == false && this.altitude > 0)
+				GroundPlayer(this);
 
+		}
 	}
 	@Override
 	public void updateFlight() {
diff --git a/src/engine/powers/poweractions/AbstractPowerAction.java b/src/engine/powers/poweractions/AbstractPowerAction.java
index f7b1914f..20911147 100644
--- a/src/engine/powers/poweractions/AbstractPowerAction.java
+++ b/src/engine/powers/poweractions/AbstractPowerAction.java
@@ -76,75 +76,108 @@ public abstract class AbstractPowerAction {
 				int token = DbManager.hasher.SBStringHash(IDString);
 				//cache token, used for applying effects.
 				PowersManager.ActionTokenByIDString.put(IDString, token);
-				if (type.equals("ApplyEffect"))
-					apa = new ApplyEffectPowerAction(rs, effects);
-				else if (type.equals("ApplyEffects"))
-					apa = new ApplyEffectsPowerAction(rs, effects);
-				else if (type.equals("DeferredPower"))
-					apa = new DeferredPowerPowerAction(rs, effects);
-				else if (type.equals("DamageOverTime"))
-					apa = new DamageOverTimePowerAction(rs, effects);
-				else if (type.equals("Peek"))
-					apa = new PeekPowerAction(rs);
-				else if (type.equals("Charm"))
-					apa = new CharmPowerAction(rs);
-				else if (type.equals("Fear"))
-					apa = new FearPowerAction(rs);
-				else if (type.equals("Confusion"))
-					apa = new ConfusionPowerAction(rs);
-				else if (type.equals("RemoveEffect"))
-					apa = new RemoveEffectPowerAction(rs);
-				else if (type.equals("Track"))
-					apa = new TrackPowerAction(rs, effects);
-				else if (type.equals("DirectDamage"))
-					apa = new DirectDamagePowerAction(rs, effects);
-				else if (type.equals("Transform"))
-					apa = new TransformPowerAction(rs, effects);
-				else if (type.equals("CreateMob"))
-					apa = new CreateMobPowerAction(rs);
-				else if (type.equals("Invis"))
-					apa = new InvisPowerAction(rs, effects);
-				else if (type.equals("ClearNearbyAggro"))
-					apa = new ClearNearbyAggroPowerAction(rs);
-				else if (type.equals("MobRecall"))
-					apa = new MobRecallPowerAction(rs);
-				else if (type.equals("SetItemFlag"))
-					apa = new SetItemFlagPowerAction(rs);
-				else if (type.equals("SimpleDamage"))
-					apa = new SimpleDamagePowerAction(rs);
-				else if (type.equals("TransferStatOT"))
-					apa = new TransferStatOTPowerAction(rs, effects);
-				else if (type.equals("TransferStat"))
-					apa = new TransferStatPowerAction(rs, effects);
-				else if (type.equals("Teleport"))
-					apa = new TeleportPowerAction(rs);
-				else if (type.equals("TreeChoke"))
-					apa = new TreeChokePowerAction(rs);
-				else if (type.equals("Block"))
-					apa = new BlockPowerAction(rs);
-				else if (type.equals("Resurrect"))
-					apa = new ResurrectPowerAction(rs);
-				else if (type.equals("ClearAggro"))
-					apa = new ClearAggroPowerAction(rs);
-				else if (type.equals("ClaimMine"))
-					apa = new ClaimMinePowerAction(rs);
-				else if (type.equals("Recall"))
-					apa = new RecallPowerAction(rs);
-				else if (type.equals("SpireDisable"))
-					apa = new SpireDisablePowerAction(rs);
-				else if (type.equals("Steal"))
-					apa = new StealPowerAction(rs);
-				else if (type.equals("Summon"))
-					apa = new SummonPowerAction(rs);
-				else if (type.equals("RunegateTeleport"))
-					apa = new RunegateTeleportPowerAction(rs);
-				else if (type.equals("RunegateTeleport"))
-					apa = new RunegateTeleportPowerAction(rs);
-				else if (type.equals("OpenGate"))
-					apa = new OpenGatePowerAction(rs);
-				else {
-					Logger.error("valid type not found for poweraction of ID" + rs.getInt("ID"));
-					continue;
+				apa = null;
+				switch (type)
+				{
+					default:
+						Logger.error("valid type not found for poweraction of ID" + rs.getInt("ID"));
+						break;
+					case "ApplyEffect":
+						apa = new ApplyEffectPowerAction(rs, effects);
+						break;
+					case "ApplyEffects":
+						apa = new ApplyEffectsPowerAction(rs, effects);
+						break;
+					case "DeferredPower":
+						apa = new DeferredPowerPowerAction(rs, effects);
+						break;
+					case "DamageOverTime":
+						apa = new DamageOverTimePowerAction(rs, effects);
+						break;
+					case "Peek":
+						apa = new PeekPowerAction(rs);
+						break;
+					case "Charm":
+						apa = new CharmPowerAction(rs);
+						break;
+					case "Fear":
+						apa = new FearPowerAction(rs);
+						break;
+					case "Confusion":
+						apa = new ConfusionPowerAction(rs);
+						break;
+					case "RemoveEffect":
+						apa = new RemoveEffectPowerAction(rs);
+						break;
+					case "Track":
+						apa = new TrackPowerAction(rs, effects);
+						break;
+					case "DirectDamage":
+						apa = new DirectDamagePowerAction(rs, effects);
+						break;
+					case "Transform":
+						apa = new TransformPowerAction(rs, effects);
+						break;
+					case "CreateMob":
+						apa = new CreateMobPowerAction(rs);
+						break;
+					case "Invis":
+						apa = new InvisPowerAction(rs, effects);
+						break;
+					case "ClearNearbyAggro":
+						apa = new ClearNearbyAggroPowerAction(rs);
+						break;
+					case "MobRecall":
+						apa = new MobRecallPowerAction(rs);
+						break;
+					case "SetItemFlag":
+						apa = new SetItemFlagPowerAction(rs);
+						break;
+					case "SimpleDamage":
+						apa = new SimpleDamagePowerAction(rs);
+						break;
+					case "TransferStatOT":
+						apa = new TransferStatOTPowerAction(rs, effects);
+						break;
+					case "TransferStat":
+						apa = new TransferStatPowerAction(rs, effects);
+						break;
+					case "Teleport":
+						apa = new TeleportPowerAction(rs);
+						break;
+					case "TreeChoke":
+						apa = new TreeChokePowerAction(rs);
+						break;
+					case "Block":
+						apa = new BlockPowerAction(rs);
+						break;
+					case "Resurrect":
+						apa = new ResurrectPowerAction(rs);
+						break;
+					case "ClearAggro":
+						apa = new ClearAggroPowerAction(rs);
+						break;
+					case "ClaimMine":
+						apa = new ClaimMinePowerAction(rs);
+						break;
+					case "Recall":
+						apa = new RecallPowerAction(rs);
+						break;
+					case "SpireDisable":
+						apa = new SpireDisablePowerAction(rs);
+						break;
+					case "Steal":
+						apa = new StealPowerAction(rs);
+						break;
+					case "Summon":
+						apa = new SummonPowerAction(rs);
+						break;
+					case "RunegateTeleport":
+						apa = new RunegateTeleportPowerAction(rs);
+						break;
+					case "OpenGate":
+						apa = new OpenGatePowerAction(rs);
+						break;
 				}
 				powerActions.put(IDString, apa);
 				powerActionsByID.put(apa.UUID, apa);