    /**
     * @private
     */
    Ext.define('Ext.fx.easing.Momentum', {

        extend: 'Ext.fx.easing.Abstract',

        config: {
            acceleration: 30,
            friction: 0,
            startVelocity: 0
        },

        alpha: 0,

        updateFriction: function(friction) {
            var theta = Math.log(1 - (friction / 10));

            this.theta = theta;

            this.alpha = theta / this.getAcceleration();
        },

        updateStartVelocity: function(velocity) {
            this.velocity = velocity * this.getAcceleration();
        },

        updateAcceleration: function(acceleration) {
            this.velocity = this.getStartVelocity() * acceleration;

            this.alpha = this.theta / acceleration;
        },

        getValue: function() {
            return this.getStartValue() - this.velocity * (1 - this.getFrictionFactor()) / this.theta;
        },

        getFrictionFactor: function() {
            var deltaTime = Ext.Date.now() - this.getStartTime();

            return Math.exp(deltaTime * this.alpha);
        },

        getVelocity: function() {
            return this.getFrictionFactor() * this.velocity;
        }
    });