    /**
     * @private
     */
    Ext.define('Ext.draw.engine.ImageExporter', {
        singleton: true,

        statics: (function(){
            var exportTypes = {
                "image/png": 1,
                "image/jpeg": 1
                },
                init = function(config){

                    if(config.hasOwnProperty('width')){
                        width = config['width'];
                    }
                    if(config.hasOwnProperty('height')){
                        height = config['height'];
                    }
                    if(config.hasOwnProperty('type') && exportTypes[config['type']]){
                        type = config['type'];
                    }else{
                        return false;
                    }

                    // if all the elements were set up before
                    // we don't need to reset their values and reappend them to the form
                    if(formEl && svgEl && typeEl && widthEl && heightEl){
                        return true;
                    }

                    formEl = formEl || Ext.get(document.createElement('form'));
                    formEl.set({
                        action: 'http://svg.sencha.io',
                        method: 'POST'
                    });

                    svgEl = svgEl || Ext.get(document.createElement('input'));
                    svgEl.set({
                        name: 'svg',
                        type: 'hidden'
                    });

                    typeEl = typeEl || Ext.get(document.createElement('input'));
                    typeEl.set({
                        name: 'type',
                        type: 'hidden'
                    });
                    widthEl = widthEl || Ext.get(document.createElement('input'));
                    widthEl.set({
                        name: 'width',
                        type: 'hidden'
                    });
                    heightEl = heightEl || Ext.get(document.createElement('input'));
                    heightEl.set({
                        name: 'height',
                        type: 'hidden'
                    });

                    formEl.appendChild(svgEl);
                    formEl.appendChild(typeEl);
                    formEl.appendChild(widthEl);
                    formEl.appendChild(heightEl);

                    Ext.getBody().appendChild(formEl);

                    return true;
                },
                process = function(surface){

                    var svgString = Ext.draw.engine.SvgExporter.self.generate({}, surface);

                    widthEl.set({
                        value: width || surface.width
                    });

                    heightEl.set({
                        value: height || surface.height
                    });

                    if(type){
                        typeEl.set({
                            value: type
                        });
                    }
                    svgEl.set({
                        value: svgString
                    });

                    formEl.dom.submit();

                },
                formEl, typeEl, svgEl, widthEl, heightEl, type, width, height;

            return {
                generate: function(config, surface){
                    if(init(config)){
                        process(surface);
                    }else{
                        return false;
                    }
                }
            };
        }())

    });