diff --git a/lib/windows8/plugin/windows8/FileTransferProxy.js b/lib/windows8/plugin/windows8/FileTransferProxy.js
index 1ce79d0..17afe65 100644
--- a/lib/windows8/plugin/windows8/FileTransferProxy.js
+++ b/lib/windows8/plugin/windows8/FileTransferProxy.js
@@ -29,6 +29,7 @@
     upload:function(successCallback, error, options) {
         var filePath = options[0];
         var server = options[1];
+        var headers = options[8] || {};
 
 
         var win = function (fileUploadResult) {
@@ -49,7 +50,7 @@
                 var blob = MSApp.createBlobFromRandomAccessStream(storageFile.contentType, stream);
                 var formData = new FormData();
                 formData.append("source\";filename=\"" + storageFile.name + "\"", blob);
-                WinJS.xhr({ type: "POST", url: server, data: formData }).then(function (response) {
+                WinJS.xhr({ type: "POST", url: server, data: formData, headers: headers }).then(function (response) {
                     var code = response.status;
                     storageFile.getBasicPropertiesAsync().done(function (basicProperties) {
 
@@ -73,6 +74,7 @@
     download:function(win, error, options) {
         var source = options[0];
         var target = options[1];
+        var headers = options[4] || {};
 
 
         if (target === null || typeof target === undefined) {
@@ -96,6 +98,12 @@
             storageFolder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.generateUniqueName).then(function (storageFile) {
                 var uri = Windows.Foundation.Uri(source);
                 var downloader = new Windows.Networking.BackgroundTransfer.BackgroundDownloader();
+
+                for (var header in headers) {
+                    downloader.setRequestHeader(header, headers[header]);
+                }
+
+
                 download = downloader.createDownload(uri, storageFile);
                 download.startAsync().then(function () {
                     win(new FileEntry(storageFile.name, storageFile.path));
