Ah physics, so much above me yet so admired. I all else fails use a force vector system. I developed this for an engine of mine that is a simple 2D space shooter.
you'll program two variables:
force_x=0
force_y=0
Then every time an operation with the keyboard, joystick is introduced, accelerate the force variables to a maximum level. Then add the variables to the player x/y position. To introduce friction, you just subtrack a value of friction that is smaller than the increments used to beef up the forces once the keys are not pressed.
If you want I could send you a code snippet. I simply fear that posting it now could take way too much space before my welcome.
"I need gopher-chucks!!"