Libgdx Box2D Movement Issue

I have code to get the character almost moving like I want it. I just can not figure out a solution to get the movement perfect. The Box2D body is moving right in every aspect except if you hold down the the keys for down and left then press key for opposite direction it sticks to same direction. If you do this with key up or key right and you press key for opposite it swaps directions even if your still holding down the key which is the desired effect. It does this because of the order it is in code, but I have not been able to find a way to get it to work both ways.

// move B2D body, set curState
		if (Gdx.input.isKeyPressed(Keys.S) || Gdx.input.isKeyPressed(Keys.W) || Gdx.input.isKeyPressed(Keys.A)
				|| Gdx.input.isKeyPressed(Keys.D)) {
			if (Gdx.input.isKeyPressed(Keys.S) && body.getLinearVelocity().y >= -speed) {
				body.applyLinearImpulse(new Vector2(0, -0.3f), body.getWorldCenter(), true);
				curState = State.WALKDOWN;
			}
			if (Gdx.input.isKeyPressed(Keys.W) && body.getLinearVelocity().y <= speed) {
				body.applyLinearImpulse(new Vector2(0, 0.3f), body.getWorldCenter(), true);
				curState = State.WALKUP;
			}
			if (Gdx.input.isKeyPressed(Keys.A) && body.getLinearVelocity().x >= -speed) {
				body.applyLinearImpulse(new Vector2(-0.3f, 0), body.getWorldCenter(), true);
				curState = State.WALKLEFT;
			}
			if (Gdx.input.isKeyPressed(Keys.D) && body.getLinearVelocity().x <= speed) {
				body.applyLinearImpulse(new Vector2(0.3f, 0), body.getWorldCenter(), true);
				curState = State.WALKRIGHT;
			}
			// set state for if angled direction
			if (Gdx.input.isKeyPressed(Keys.S) && Gdx.input.isKeyPressed(Keys.A)) {
				curState = State.WALKDOWN;
			} else if (Gdx.input.isKeyPressed(Keys.S) && Gdx.input.isKeyPressed(Keys.D)) {
				curState = State.WALKDOWN;
			} else if (Gdx.input.isKeyPressed(Keys.W) && Gdx.input.isKeyPressed(Keys.A)) {
				curState = State.WALKUP;
			} else if (Gdx.input.isKeyPressed(Keys.W) && Gdx.input.isKeyPressed(Keys.D)) {
				curState = State.WALKUP;
			}

		} else {
			body.setAwake(false);
		}
		// sets player stand direction to direction prev walking
		if (!body.isAwake()) {
			if (curState == State.WALKDOWN) {
				curState = State.STANDDOWN;
			} else if (curState == State.WALKUP) {
				curState = State.STANDUP;
			} else if (curState == State.WALKLEFT) {
				curState = State.STANDLEFT;
			} else if (curState == State.WALKRIGHT) {
				curState = State.STANDRIGHT;
			}
		}

This is the code I have. The only reason the up and right is working correctly is because down and left is called first. Is there anyway to get down and left working? Any help would be appreciated.

Use vectors to determine direction, normalize and multiply by a speed factor.