              if entry[3] == 'U':
                  self.logger.info('Retrieving file from server : %s', entry[0])
                  cur_file = os.path.normpath(entry[0])
-@@ -1910,6 +1933,9 @@
+@@ -1910,6 +1934,9 @@
          md5reoblk = {CLIENT: self.md5reobfclient, SERVER: self.md5reobfserver}
          outpathlk = {CLIENT: self.srcmodclient, SERVER: self.srcmodserver}
          src = {CLIENT: self.srcclient, SERVER: self.srcserver}

                 for class_file in fnmatch.filter(filelist, '*.class'):
                     class_name = class_path + os.path.splitext(class_file)[0]
                     bin_file = os.path.normpath(os.path.join(path, class_file))
@@ -1890,6 +1910,9 @@
                 sys.exit(1)
 
         for entry in newfiles:

+            os.unlink(f.name)
+        f = NamedTemporaryFile(mode='wb', suffix='.txt', prefix ='java_src_path_', delete=False) #FML: We write to a temporary file just in case the command is to long
+        for line in pkglist:
+            f.write('"%s"\n' % os.path.abspath(line))
+        f.close()
+        dirs = '@"%s"' % f.name
         classpath = os.pathsep.join(cplk[side])
         forkcmd = self.cmdrecomp.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side],
                                         pkgs=dirs)
@@ -1336,9 +1353,10 @@
             self.logger.error('==================')
             self.logger.error('')
             raise
+        os.unlink(f.name)
 
     def startserver(self, mainclass, extraargs):
-        classpath = [self.binserver] + self.cpathserver
