 				var sign:int, e:Entity;
 				if (x != 0)
 				{
-					if (sweep || collide(solidType, this.x + x, this.y))
+					if (collidable && (sweep || collide(solidType, this.x + x, this.y)))
 					{
 						sign = x > 0 ? 1 : -1;
 						while (x != 0)
 						{
-							if (collide(solidType, this.x + sign, this.y))
+							if ((e = collide(solidType, this.x + sign, this.y)))
 							{
-								if (callbackX != null) callbackX();
+								moveCollideX(e);
 								break;
 							}
 							else

				}
				if (y != 0)
				{
					if (sweep || collide(solidType, this.x, this.y + y))
					{
						sign = y > 0 ? 1 : -1;
						while (y != 0)
						{
							if (collide(solidType, this.x, this.y + sign))
							{
								if (callbackY != null) callbackY();
								break;
							}
							else

		public function get centerY():Number { return y - originY + height / 2; }
		
		/**
		 * The leftmost position of the Entity's hitbox.
		 */
		public function get left():Number { return x - originX; }
		
		/**
		 * The rightmost position of the Entity's hitbox.
		 */
		public function get right():Number { return x - originX + width; }
		
		/**
		 * The topmost position of the Entity's hitbox.
		 */
		public function get top():Number { return y - originY; }
		
		/**
		 * The bottommost position of the Entity's hitbox.
		 */
		public function get bottom():Number { return y - originY + height; }
		
		/**
		 * The rendering layer of this Entity. Higher layers are rendered first.
		 */
		public function get layer():int { return _layer; }
