Index: css/Uploader.css
===================================================================
--- css/Uploader.css	(revision 7304)
+++ css/Uploader.css	(revision 8139)
@@ -3,7 +3,6 @@
     position: relative;
     display: block;
     clear: both;
-    padding: 1em 2em;
 }
 
 .fl-uploader-manually-degrade, .fl-uploader-manually-enhance {
@@ -130,11 +129,18 @@
     background-color: #FFF;
 }
 
-.fl-uploader .fl-uploader-browse-overlay {
+.fl-uploader-browse-overlay {
     position: absolute;
-    z-index: 1;
+    bottom: 50px;
+    left: 325px;
+    z-index: 7;
 }
 
+.fl-uploader-flash10-wrapper {
+    position: relative;
+    float: left;
+}
+
 /* FILE QUEUE TABLE STYLES */
 
 /* caption */
@@ -354,6 +360,7 @@
 
 .fl-uploader-btns {
     margin-top: 1em;
+    text-align:right;
 }
 
 .fl-uploader-btns .fl-uploader-upload, .fl-uploader-btns .fl-uploader-resume,  .fl-uploader-btns .fl-uploader-pause {
@@ -365,7 +372,6 @@
 }
 
 .fl-uploader-btns button {
-    float: right;
     padding: 0;
 }
 
Index: js/Uploader.js
===================================================================
--- js/Uploader.js	(revision 7304)
+++ js/Uploader.js	(revision 8139)
@@ -161,6 +161,7 @@
     
     var renderRowFromTemplate = function (that, file) {
         var row = that.rowTemplate.clone();
+        row.removeClass(that.options.styles.hiddenTemplate);
         that.locate("fileName", row).text(file.name);
         that.locate("fileSize", row).text(fluid.uploader.formatFileSize(file.size));
         that.locate("fileIconBtn", row).addClass(that.options.styles.remove);
@@ -288,10 +289,6 @@
     var prepareTemplateElements = function (that) {
         // Grab our template elements out of the DOM.  
         that.rowTemplate = that.locate("rowTemplate").remove();
-        /* FLUID-2720 - do not hide the row under IE8 */
-        if ($.browser.msie && ($.browser.version >= 8)) {
-            that.rowTemplate.removeClass(that.options.styles.hiddenTemplate);
-        }
         that.errorInfoRowTemplate = that.locate("errorInfoRowTemplate").remove();
         that.errorInfoRowTemplate.removeClass(that.options.styles.hiddenTemplate);
         that.rowProgressorTemplate = that.locate("rowProgressorTemplate", that.uploadContainer).remove();
Index: js/SWFUploadManager.js
===================================================================
--- js/SWFUploadManager.js	(revision 7304)
+++ js/SWFUploadManager.js	(revision 8139)
@@ -40,80 +40,51 @@
         };
     };
     
-    var createAfterReadyHandler = function (that, uploader) {
-        return function () {
-            var flashMovie = $("#" + uploader.uploadManager.swfUploader.movieName, uploader.container);
-            var browseButton = uploader.locate("browseButton");
-            
-            // Do our best to make the Flash movie as accessible as possib
-            fluid.tabindex(flashMovie, 0);
-            flashMovie.attr("role", "button");
-            flashMovie.attr("alt", "Browse files button");
-            
-            if (that.isTransparent) {
-                // Style the Flash movie so that it floats trasparently over the button.
-                flashMovie.addClass(that.options.styles.browseButtonOverlay);
-                flashMovie.css("top", browseButton.position().top);
-                flashMovie.css("left", browseButton.position().left);
-            }
-        };
-    };
-    
-    var createFlash9MovieContainer = function () {
-        // Create a hidden container and a placeholder element for SWFUpload to replace.
-        var container = $("<div class='fl-uploader-flash9-container'></div>");
-        var placeholder = $("<span></span>");
-        var placeholderId = fluid.allocateSimpleId(placeholder);
-        container.append(placeholder);
+    var createFlash9MovieContainer = function (that) {
+        var container = $("<div><span></span></div>");
+        container.addClass(that.options.styles.flash9Container);
         $("body").append(container);
-        return placeholderId;
+        return container;
     };
     
-    var setupForFlash9 = function (that, uploader) {
+    var setupForFlash9 = function (that) {
+        var flashContainer = createFlash9MovieContainer(that);
         that.returnedOptions.uploadManager.options = {
             flashURL: that.options.flash9URL || undefined,
-            flashButtonPeerId: createFlash9MovieContainer()
+            flashButtonPeerId: fluid.allocateSimpleId(flashContainer.children().eq(0))
         };
     };
     
-    var createEmptyPlaceholder = function () {
-        var placeholder = $("<span></span>");
-        fluid.allocateSimpleId(placeholder);
+    var createFlash10MovieContainer = function (that, uploaderContainer) {        
+        // Wrap the whole uploader first.
+        uploaderContainer.wrap("<div class='" + that.options.styles.uploaderWrapperFlash10 + "'></div>");
         
-        return placeholder;
+        // Then create a container and placeholder for the Flash movie as a sibling to the uploader.
+        var flashContainer = $("<div><span></span></div>");
+        flashContainer.addClass(that.options.styles.browseButtonOverlay);
+        uploaderContainer.after(flashContainer);
+        unbindSelectFiles();        
+        return flashContainer;
     };
     
-    var createButtonPlaceholder = function (browseButton) {
-        var placeholder = $("<span></span>");
-        var placeholderId = fluid.allocateSimpleId(placeholder);
-        browseButton.before(placeholder);
-        unbindSelectFiles();
-        
-        return placeholderId;
-    };
-    
     var setupForFlash10 = function (that, uploader) {
-        // If we're working in Flash 10 or later, we need to attach the Flash movie to the browse button.
-        var browseButton = uploader.locate("browseButton");
-        fluid.tabindex(browseButton, -1);
-
-        that.isTransparent = that.options.flashButtonAlwaysVisible ? false : 
-                                                                     (!$.browser.msie || that.options.transparentEvenInIE);
+        var o = that.options,
+            flashContainer = createFlash10MovieContainer(that, uploader.container);
+            browseButton = uploader.locate("browseButton"),
+            h = o.flashButtonHeight || browseButton.outerHeight(),
+            w = o.flashButtonWidth || browseButton.outerWidth();
         
-        // If the button is transparent, we'll need an extra placeholder element which will be replaced by the movie.
-        // If the Flash movie is visible, we can just replace the button itself.
-        var peerId = that.isTransparent ? createButtonPlaceholder(browseButton) : fluid.allocateSimpleId(browseButton);
-        
+        fluid.tabindex(browseButton, -1);
+        that.isTransparent = o.flashButtonAlwaysVisible ? false : (!$.browser.msie || o.transparentEvenInIE);
         that.returnedOptions.uploadManager.options = {
-            flashURL: that.options.flash10URL || undefined,
-            flashButtonImageURL: that.isTransparent ? undefined : that.options.flashButtonImageURL, 
-            flashButtonPeerId: peerId,
-            flashButtonHeight: that.isTransparent ? browseButton.outerHeight(): that.options.flashButtonHeight,
-            flashButtonWidth: that.isTransparent ? browseButton.outerWidth(): that.options.flashButtonWidth,
+            flashURL: o.flash10URL || undefined,
+            flashButtonImageURL: that.isTransparent ? undefined : o.flashButtonImageURL, 
+            flashButtonPeerId: fluid.allocateSimpleId(flashContainer.children().eq(0)),
+            flashButtonHeight: h,
+            flashButtonWidth: w,
             flashButtonWindowMode: that.isTransparent ? SWFUpload.WINDOW_MODE.TRANSPARENT : SWFUpload.WINDOW_MODE.OPAQUE,
             flashButtonCursorEffect: SWFUpload.CURSOR.HAND,
             listeners: {
-                afterReady: createAfterReadyHandler(that, uploader),
                 onUploadStart: function () {
                     uploader.uploadManager.swfUploader.setButtonDisabled(true);
                 },
@@ -148,16 +119,16 @@
     
     fluid.defaults("fluid.swfUploadSetupDecorator", {
         // The flash9URL and flash10URLs are now deprecated in favour of the flashURL option in upload manager.
-        flashButtonAlwaysVisible: true,
-        transparentEvenInIE: false,
+        flashButtonAlwaysVisible: false,
+        transparentEvenInIE: true,
         
         // Used only when the Flash movie is visible.
         flashButtonImageURL: "../images/browse.png",
-        flashButtonHeight: 22,
-        flashButtonWidth: 106,
         
         styles: {
-            browseButtonOverlay: "fl-uploader-browse-overlay"
+            browseButtonOverlay: "fl-uploader-browse-overlay",
+            flash9Container: "fl-uploader-flash9-container",
+            uploaderWrapperFlash10: "fl-uploader-flash10-wrapper"
         }
     });
     
