Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 74733)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 74734)
@@ -11969,5 +11969,5 @@
   <interface
     name="IGuestSession" extends="$unknown"
-    uuid="9880f6e3-c4c1-4031-8ec2-28ee088370e4"
+    uuid="07241827-f602-48c8-8511-4d933f3cf0bb"
     wsmap="managed"
     reservedMethods="8" reservedAttributes="8"
@@ -12147,7 +12147,4 @@
         <desc>Array of source filters. This uses the
           DOS/NT style wildcard characters '?' and '*'.</desc>
-      </param>
-      <param name="types" type="FsObjType" dir="in" safearray="yes">
-        <desc>Array of source <link to="FsObjType"/> types.</desc>
       </param>
       <param name="flags" type="wstring" dir="in" safearray="yes">
@@ -12205,7 +12202,4 @@
         <desc>Array of source filters. This uses the
           DOS/NT style wildcard characters '?' and '*'.</desc>
-      </param>
-      <param name="types" type="FsObjType" dir="in" safearray="yes">
-        <desc>Array of source <link to="FsObjType"/> types.</desc>
       </param>
       <param name="flags" type="wstring" dir="in" safearray="yes">
Index: /trunk/src/VBox/Main/include/GuestCtrlImplPrivate.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestCtrlImplPrivate.h	(revision 74733)
+++ /trunk/src/VBox/Main/include/GuestCtrlImplPrivate.h	(revision 74734)
@@ -1118,4 +1118,5 @@
      *  extended director's cut version. */
     int signalWaitEventInternalEx(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, int rc, int guestRc, const GuestWaitEventPayload *pPayload);
+
 public:
 
@@ -1129,4 +1130,8 @@
     int unregisterWaitEvent(GuestWaitEvent *pEvent);
     int waitForEvent(GuestWaitEvent *pEvent, uint32_t uTimeoutMS, VBoxEventType_T *pType, IEvent **ppEvent);
+
+public:
+
+    static FsObjType_T fileModeToFsObjType(RTFMODE fMode);
 
 protected:
Index: /trunk/src/VBox/Main/include/GuestSessionImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestSessionImpl.h	(revision 74733)
+++ /trunk/src/VBox/Main/include/GuestSessionImpl.h	(revision 74734)
@@ -83,5 +83,4 @@
     HRESULT copyFromGuest(const std::vector<com::Utf8Str> &aSources,
                           const std::vector<com::Utf8Str> &aFilters,
-                          const std::vector<FsObjType_T> &aTypes,
                           const std::vector<com::Utf8Str> &aFlags,
                           const com::Utf8Str &aDestination,
@@ -89,5 +88,4 @@
     HRESULT copyToGuest(const std::vector<com::Utf8Str> &aSources,
                         const std::vector<com::Utf8Str> &aFilters,
-                        const std::vector<FsObjType_T> &aTypes,
                         const std::vector<com::Utf8Str> &aFlags,
                         const com::Utf8Str &aDestination,
Index: /trunk/src/VBox/Main/src-client/GuestCtrlPrivate.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestCtrlPrivate.cpp	(revision 74733)
+++ /trunk/src/VBox/Main/src-client/GuestCtrlPrivate.cpp	(revision 74734)
@@ -1133,4 +1133,20 @@
 }
 
+/**
+ * Converts RTFMODE to FsObjType_T.
+ *
+ * @return  Converted FsObjType_T type.
+ * @param   enmType             RTFMODE to convert.
+ */
+/* static */
+FsObjType_T GuestBase::fileModeToFsObjType(RTFMODE fMode)
+{
+    if (RTFS_IS_FILE(fMode))           return FsObjType_File;
+    else if (RTFS_IS_DIRECTORY(fMode)) return FsObjType_Directory;
+    else if (RTFS_IS_SYMLINK(fMode))   return FsObjType_Symlink;
+
+    return FsObjType_Unknown;
+}
+
 GuestObject::GuestObject(void)
     : mSession(NULL),
Index: /trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp	(revision 74733)
+++ /trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp	(revision 74734)
@@ -2892,6 +2892,6 @@
 
 HRESULT GuestSession::copyFromGuest(const std::vector<com::Utf8Str> &aSources, const std::vector<com::Utf8Str> &aFilters,
-                                    const std::vector<FsObjType_T> &aTypes, const std::vector<com::Utf8Str> &aFlags,
-                                    const com::Utf8Str &aDestination, ComPtr<IProgress> &aProgress)
+                                    const std::vector<com::Utf8Str> &aFlags, const com::Utf8Str &aDestination,
+                                    ComPtr<IProgress> &aProgress)
 {
     AutoCaller autoCaller(this);
@@ -2900,5 +2900,4 @@
     const size_t cSources = aSources.size();
     if (   aFilters.size() != cSources
-        || aTypes.size()   != cSources
         || aFlags.size()   != cSources)
     {
@@ -2910,13 +2909,28 @@
     std::vector<com::Utf8Str>::const_iterator itSource = aSources.begin();
     std::vector<com::Utf8Str>::const_iterator itFilter = aFilters.begin();
-    std::vector<FsObjType_T>::const_iterator  itType   = aTypes.begin();
     std::vector<com::Utf8Str>::const_iterator itFlags  = aFlags.begin();
 
+    const bool fContinueOnErrors = false; /** @todo Do we want a flag for that? */
+    const bool fFollowSymlinks   = true;  /** @todo Ditto. */
+
     while (itSource != aSources.end())
     {
+        GuestFsObjData objData;
+        int rcGuest;
+        int vrc = i_fsQueryInfo(*(itSource), fFollowSymlinks, objData, &rcGuest);
+        if (   RT_FAILURE(vrc)
+            && !fContinueOnErrors)
+        {
+            if (GuestProcess::i_isGuestError(vrc))
+                return setError(E_FAIL, tr("Unable to query type for source '%s': %s"), (*itSource).c_str(),
+                                           GuestProcess::i_guestErrorToString(rcGuest).c_str());
+            else
+                return setError(E_FAIL, tr("Unable to query type for source '%s' (%Rrc)"), (*itSource).c_str(), vrc);
+        }
+
         GuestSessionFsSourceSpec source;
         source.strSource    = *itSource;
         source.strFilter    = *itFilter;
-        source.enmType      = *itType;
+        source.enmType      = objData.mType;
         source.enmPathStyle = i_getPathStyle();
 
@@ -2938,5 +2952,4 @@
         ++itSource;
         ++itFilter;
-        ++itType;
         ++itFlags;
     }
@@ -2946,6 +2959,6 @@
 
 HRESULT GuestSession::copyToGuest(const std::vector<com::Utf8Str> &aSources, const std::vector<com::Utf8Str> &aFilters,
-                                  const std::vector<FsObjType_T> &aTypes, const std::vector<com::Utf8Str> &aFlags,
-                                  const com::Utf8Str &aDestination, ComPtr<IProgress> &aProgress)
+                                  const std::vector<com::Utf8Str> &aFlags, const com::Utf8Str &aDestination,
+                                  ComPtr<IProgress> &aProgress)
 {
     AutoCaller autoCaller(this);
@@ -2954,5 +2967,4 @@
     const size_t cSources = aSources.size();
     if (   aFilters.size() != cSources
-        || aTypes.size()   != cSources
         || aFlags.size()   != cSources)
     {
@@ -2964,13 +2976,22 @@
     std::vector<com::Utf8Str>::const_iterator itSource = aSources.begin();
     std::vector<com::Utf8Str>::const_iterator itFilter = aFilters.begin();
-    std::vector<FsObjType_T>::const_iterator  itType   = aTypes.begin();
     std::vector<com::Utf8Str>::const_iterator itFlags  = aFlags.begin();
 
+    const bool fContinueOnErrors = false; /** @todo Do we want a flag for that? */
+
     while (itSource != aSources.end())
     {
+        RTFSOBJINFO objInfo;
+        int vrc = RTPathQueryInfo((*itSource).c_str(), &objInfo, RTFSOBJATTRADD_NOTHING);
+        if (   RT_FAILURE(vrc)
+            && !fContinueOnErrors)
+        {
+            return setError(E_FAIL, tr("Unable to query type for source '%s' (%Rrc)"), (*itSource).c_str(), vrc);
+        }
+
         GuestSessionFsSourceSpec source;
         source.strSource    = *itSource;
         source.strFilter    = *itFilter;
-        source.enmType      = *itType;
+        source.enmType      = GuestBase::fileModeToFsObjType(objInfo.Attr.fMode);
         source.enmPathStyle = i_getPathStyle();
 
@@ -2993,5 +3014,4 @@
         ++itSource;
         ++itFilter;
-        ++itType;
         ++itFlags;
     }
