Character Controller facing travel direction.

Im using a CharacterController. Here is the movement script which works.

if (controller.isGrounded) {
                    moveDirection = new Vector3 (Input.GetAxis ("Horizontal"), 0, Input.GetAxis ("Vertical"));
                    moveDirection = transform.TransformDirection (moveDirection);
                    moveDirection *= speed;
                    if (Input.GetButton ("Jump"))
                            moveDirection.y = jumpSpeed;
            }

            moveDirection.y -= gravity * Time.deltaTime;
            controller.Move (moveDirection * Time.deltaTime);

Questions:

How could i prevent it from going twice the speed when moving diagonally? I know its supposed to be with Vector3.Normalize(), but when i try it just makes everything go very slow whatever i declare speed to be.

Id like the shape model of the player to face the direction it is moving. I could read the keys and just rotate it 90 degrees if its moving to the right and so on, but id like it to be exact direction and dont know how to convert the speed direction to angles.

Im new to using characterController. I cant figure out how i could get slower acceleration, set max speed, and then have a slower decelaration.

you just have to change:

moveDirection = transform.TransformDirection (moveDirection);

into:

if (moveDirection != Vector3.zero)
transform.rotation = Quaternion.LookRotation (moveDirection);

moveDirection = new Vector3 (Input.GetAxis (“Horizontal”), 0, Input.GetAxis (“Vertical”)).normalized;

moveDirection = transform.TransformDirection (moveDirection);

Quaternion rot = Quaternion.LookRotation(moveDirection); //set this rotation to model

Velocity