function ExpressionValue(elementProp, mult, type) {
    mult = mult || 1;
    var expressionValue, arrayValue;

    if (elementProp.k) {
        elementProp.getValue();
    }
    var i, len, arrValue, val;
    if (type) {
        if(type === 'color') {
            len = 4;
            expressionValue = createTypedArray('float32', len);
            arrValue = createTypedArray('float32', len);
            for (i = 0; i < len; i += 1) {
                expressionValue[i] = arrValue[i] = (i < 3) ? elementProp.v[i] * mult : 1;
            }
            expressionValue.value = arrValue;
        }
    } else if (elementProp.propType === 'unidimensional'){
        val = elementProp.v * mult;
        expressionValue = new Number(val);
        expressionValue.value = val;
    } else {
        len = elementProp.pv.length;
        expressionValue = createTypedArray('float32', len);
        arrValue = createTypedArray('float32', len);
        for (i = 0; i < len; i += 1) {
            expressionValue[i] = arrValue[i] = elementProp.v[i] * mult;
        }
        expressionValue.value = arrValue;
    }
    
    expressionValue.numKeys = elementProp.keyframes ? elementProp.keyframes.length : 0;
    expressionValue.key = function(pos) {
        if (!expressionValue.numKeys) {
            return 0;
        } else {
            return elementProp.keyframes[pos-1].t;
        }
    };
    expressionValue.valueAtTime = elementProp.getValueAtTime;
    expressionValue.speedAtTime = elementProp.getSpeedAtTime;
    expressionValue.velocityAtTime = elementProp.getVelocityAtTime;
    expressionValue.propertyGroup = elementProp.propertyGroup;
    Object.defineProperty(expressionValue, 'velocity', {
        get: function(){
            return elementProp.getVelocityAtTime(elementProp.comp.currentFrame);
        }
    });
    return expressionValue;
};
