diff --git a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
index acd76c7ba5df5ab4cf6911764fc1cd1dade63132..d9c224422032c8af231c2aed125f778df9905eee 100755
--- a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
+++ b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
@@ -28,6 +28,16 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
         self.directoryTransferCommand = directoryTransferCommand 
         self.pluginMustProcessFiles = pluginMustProcessFiles 
 
+    def replaceSpecialCharacters(self, url):
+        replacementMap = {
+	    '#' : '%23',
+	    ' ' : '%20',
+	    '~' : '%7E',
+	}
+	for (original, replacement) in replacementMap.items():
+	    url = url.replace(original,replacement)
+	return url
+
     def getSrcUrl(self, filePath, dataDirectory):
         (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT)
         if scheme:
@@ -36,7 +46,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
             srcUrl = 'file://%s' % filePath
         else:
             srcUrl = '%s/%s' % (self.src,filePath)
-        return srcUrl
+        return self.replaceSpecialCharacters(srcUrl)
     
     def getDestUrl(self, filePath, dataDirectory, storageHost, storageDirectory):
         (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT)
@@ -46,7 +56,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
             destUrl = '%s/%s/%s' % (self.dest, dirName, fileName)
         else:
             destUrl = 'sshftp://%s/%s/%s/%s' % (storageHost, storageDirectory, dirName, fileName)
-        return destUrl
+        return self.replaceSpecialCharacters(destUrl)
 
     def checkUploadFilesForProcessing(self, filePathsDict, uploadInfo):
         if not self.pluginMustProcessFiles: