public void apply() {
		if(!applied) {
			applied = true;

			prevPosition = model.positions.get(actor);
			nextPosition = prevPosition;

			Vector2 velocity = actor.velocity;
			if(actor instanceof Collidable) {
				SortedMap<Double, Collidable> intersections = Collision.collision(model, (Collidable)actor, velocity);
				for(Map.Entry<Double, Collidable> entry : intersections.entrySet()) {
					

					Action response = ((Collidable)actor).collisionAction(entry.getValue());
					if(response != null) { responses.add(response); }

					Vector2 partial = velocity.mul(1 - entry.getKey());
					Vector2 reflect = ((Collidable)actor).collisionVector(entry.getValue(), partial);
					if(!partial.equals(reflect)) {
						nextPosition = nextPosition.translate(velocity.mul(entry.getKey()));
						// perform the reflection or whatever.
						velocity = reflect;
						break;
					}
				}
				nextPosition = nextPosition.translate(velocity);
			}
		}

		model.positions.put(actor, nextPosition);
		for(Action response : responses) { response.apply(); }
	}