    /**
     * @override Ext.rtl.dom.Layer
     * This override adds RTL positioning methods to Ext.dom.Layer.
     */
    Ext.define('Ext.rtl.dom.Layer', {
        override: 'Ext.dom.Layer',

        rtlLocalXYNames: {
            get: 'rtlGetLocalXY',
            set: 'rtlSetLocalXY'
        },

        rtlSetLocalX: function() {
            this.callParent(arguments);
            return this.sync();
        },

        rtlSetLocalXY: function() {
            this.callParent(arguments);
            return this.sync();
        },

        rtlSetLocalY: function() {
            this.callParent(arguments);
            return this.sync();
        },

        rtlSetXY: function(xy, animate, duration, callback, easing) {
            var me = this;

            // Callback will restore shadow state and call the passed callback
            callback = me.createCB(callback);

            me.fixDisplay();
            me.beforeAction();
            me.callParent([xy, animate, duration, callback, easing]);
            if (!animate) {
                callback();
            }
            return me;
        },

        setRtl: function(rtl) {
            var me = this,
                shadow = me.shadow;

            me.localXYNames = rtl ? me.rtlLocalXYNames : Ext.dom.Layer.prototype.localXYNames;

            if (shadow) {
                shadow.localXYNames = me.localXYNames;
            }
        }

    });