aa9bd7
diff --git a/src/FileCopy.cc b/src/FileCopy.cc
aa9bd7
index 18426e58..e0d25d8c 100644
aa9bd7
--- a/src/FileCopy.cc
aa9bd7
+++ b/src/FileCopy.cc
aa9bd7
@@ -786,21 +786,23 @@ int FileCopyPeerFA::Do()
aa9bd7
       return m;
aa9bd7
    }
aa9bd7
 
aa9bd7
-   if((want_size && size==NO_SIZE_YET && (mode==PUT || !start_transfer))
aa9bd7
-   || (want_date && date==NO_DATE_YET))
aa9bd7
+   // if we need some info and cannot start the transfer (yet),
aa9bd7
+   // then use ARRAY_INFO to fetch the file information.
aa9bd7
+   if(((want_size && size==NO_SIZE_YET) || (want_date && date==NO_DATE_YET))
aa9bd7
+   && (mode==PUT || !start_transfer) && session->IsClosed())
aa9bd7
+   {
aa9bd7
+      FileInfo *fi=new FileInfo(file);
aa9bd7
+      if(want_size)
aa9bd7
+	 fi->Need(fi->SIZE);
aa9bd7
+      if(want_date)
aa9bd7
+	 fi->Need(fi->DATE);
aa9bd7
+      info.Empty();
aa9bd7
+      info.Add(fi);
aa9bd7
+      session->GetInfoArray(&info;;
aa9bd7
+      m=MOVED;
aa9bd7
+   }
aa9bd7
+   if(session->OpenMode()==FA::ARRAY_INFO)
aa9bd7
    {
aa9bd7
-      if(session->IsClosed())
aa9bd7
-      {
aa9bd7
-	 FileInfo *fi=new FileInfo(file);
aa9bd7
-	 if(want_size)
aa9bd7
-	    fi->Need(fi->SIZE);
aa9bd7
-	 if(want_date)
aa9bd7
-	    fi->Need(fi->DATE);
aa9bd7
-	 info.Empty();
aa9bd7
-	 info.Add(fi);
aa9bd7
-	 session->GetInfoArray(&info;;
aa9bd7
-	 m=MOVED;
aa9bd7
-      }
aa9bd7
       res=session->Done();
aa9bd7
       if(res==FA::IN_PROGRESS)
aa9bd7
 	 return m;