public void checkCollisionsAndMove(Mesh world) {

		// Only check and move if the couch is moving
		if (velocity.length() != 0 || gravityVelocity.length() != 0) {

			// Create a new collision checker
			collisionChecker = new WorldCollision(
					new Vector(velocity)
							.mult(KouchKarting.getSecondsPerFrame()),
					new Vector(gravityVelocity).mult(KouchKarting
							.getSecondsPerFrame()), new Vector(position),
					new Vector(radius).mult(0.5f), new Vector(upVector));

			// Collide with the world using the collision checker
			collisionChecker.collideAndSlide(world);

			// Keep track that collision was checked (it is not checked when the
			// couch isn't moving)
			checkedCollision = true;

			// Check which material the couch collided with, set to "none" if
			// there was no collision
			if (collisionChecker.getCollisionTriangle() != null) {
				materialOn = world.materials[collisionChecker
						.getCollisionTriangle().materialID].getName().trim();
			} else {
				materialOn = "none";
			}

			// If the material is on the grass
			if (materialOn.equals("Grass")) {

				// If the couch just moved from the road to the grass, change
				// the reset positions to that section
				if (onTheRoad) {
					resetPosition = new Vector(position);
					resetDirection = new Vector(realDirection);
					resetUpVector = new Vector(upVector);
					resetRightVector = new Vector(rightVector);
				}

				// Keep track that the couch is not on the road
				onTheRoad = false;
			}

			// If the couch is on the road, keep track that it is on the road
			else if (materialOn.equals("Road")
					|| materialOn.equals("Checkerboard")) {
				onTheRoad = true;
			}

			// Move the couch
			move();
		}
	}