Added stubbed implementation of IPersistPropertyBag interface.
Register unixfs as CLSID_FolderShortcut.

diff --git a/dlls/shell32/regsvr.c b/dlls/shell32/regsvr.c
index 2ca32b1..152060d 100644
--- a/dlls/shell32/regsvr.c
+++ b/dlls/shell32/regsvr.c
@@ -621,6 +621,15 @@
 	SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER,
 	SFGAO_FILESYSTEM
     },
+    {	&CLSID_FolderShortcut,
+	"Foldershortcut",
+	NULL,
+	"shell32.dll",
+	"Apartment",
+	SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES,
+	SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_LINK,
+	SFGAO_HASSUBFOLDER|SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR
+    },
     { NULL }			/* list terminator */
 };
 
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index d9a3090..e8096e3 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -94,6 +94,7 @@
 HRESULT WINAPI IControlPanel_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
 HRESULT WINAPI UnixFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
 HRESULT WINAPI UnixDosFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
+HRESULT WINAPI FolderShortcut_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
 extern HRESULT CPanel_GetIconLocationW(LPITEMIDLIST, LPWSTR, UINT, int*);
 HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
 HRESULT WINAPI CPanel_ExtractIconW(LPITEMIDLIST pidl, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c
index 36c3ddb..0c5cbf4 100644
--- a/dlls/shell32/shellole.c
+++ b/dlls/shell32/shellole.c
@@ -73,6 +73,7 @@
 	{&CLSID_AutoComplete,   &IAutoComplete_Constructor},
 	{&CLSID_UnixFolder,     &UnixFolder_Constructor},
 	{&CLSID_UnixDosFolder,  &UnixDosFolder_Constructor},
+	{&CLSID_FolderShortcut, &FolderShortcut_Constructor},
 	{NULL,NULL}
 };
 
diff --git a/dlls/shell32/shfldr_unixfs.c b/dlls/shell32/shfldr_unixfs.c
index 8f029e8..a10c67d 100644
--- a/dlls/shell32/shfldr_unixfs.c
+++ b/dlls/shell32/shfldr_unixfs.c
@@ -83,6 +83,7 @@
 typedef struct _UnixFolder {
     const IShellFolder2Vtbl  *lpIShellFolder2Vtbl;
     const IPersistFolder3Vtbl *lpIPersistFolder3Vtbl;
+    const IPersistPropertyBagVtbl *lpIPersistPropertyBagVtbl;
     const ISFHelperVtbl *lpISFHelperVtbl;
     LONG m_cRef;
     CHAR *m_pszPath;
@@ -511,6 +512,8 @@
                IsEqualIID(&IID_IPersistFolder, riid) || IsEqualIID(&IID_IPersist, riid)) 
     {
         *ppv = &This->lpIPersistFolder3Vtbl;
+    } else if (IsEqualIID(&IID_IPersistPropertyBag, riid)) {
+        *ppv = &This->lpIPersistPropertyBagVtbl;
     } else if (IsEqualIID(&IID_ISFHelper, riid)) {
         *ppv = &This->lpISFHelperVtbl;
     } else {
@@ -1242,6 +1245,65 @@
     UnixFolder_IPersistFolder3_GetFolderTargetInfo
 };
 
+static HRESULT WINAPI UnixFolder_IPersistPropertyBag_QueryInterface(IPersistPropertyBag* This,
+    REFIID riid, void** ppvObject)
+{
+    return UnixFolder_IShellFolder2_QueryInterface(
+                (IShellFolder2*)ADJUST_THIS(UnixFolder, IPersistPropertyBag, This), riid, ppvObject);
+}
+
+static ULONG WINAPI UnixFolder_IPersistPropertyBag_AddRef(IPersistPropertyBag* This)
+{
+    return UnixFolder_IShellFolder2_AddRef(
+                (IShellFolder2*)ADJUST_THIS(UnixFolder, IPersistPropertyBag, This));
+}
+
+static ULONG WINAPI UnixFolder_IPersistPropertyBag_Release(IPersistPropertyBag* This)
+{
+    return UnixFolder_IShellFolder2_Release(
+                (IShellFolder2*)ADJUST_THIS(UnixFolder, IPersistPropertyBag, This));
+}
+
+static HRESULT WINAPI UnixFolder_IPersistPropertyBag_GetClassID(IPersistPropertyBag* iface, 
+    CLSID* pClassID)
+{
+    return UnixFolder_IPersistFolder3_GetClassID(
+        (IPersistFolder3*)&ADJUST_THIS(UnixFolder, IPersistPropertyBag, iface)->lpIPersistFolder3Vtbl,
+        pClassID);
+}
+
+static HRESULT WINAPI UnixFolder_IPersistPropertyBag_InitNew(IPersistPropertyBag* iface)
+{
+    TRACE("() stub\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI UnixFolder_IPersistPropertyBag_Load(IPersistPropertyBag *iface, 
+    IPropertyBag *pPropertyBag, IErrorLog *pErrorLog)
+{
+    TRACE("() stub\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI UnixFolder_IPersistPropertyBag_Save(IPersistPropertyBag *iface,
+    IPropertyBag *pPropertyBag, BOOL fClearDirty, BOOL fSaveAllProperties)
+{
+    TRACE("() stub\n");
+    return E_NOTIMPL;
+}
+
+/* VTable for UnixFolder's IPersistPropertyBag interface.
+ */
+static const IPersistPropertyBagVtbl UnixFolder_IPersistPropertyBag_Vtbl = {
+    UnixFolder_IPersistPropertyBag_QueryInterface,
+    UnixFolder_IPersistPropertyBag_AddRef,
+    UnixFolder_IPersistPropertyBag_Release,
+    UnixFolder_IPersistPropertyBag_GetClassID,
+    UnixFolder_IPersistPropertyBag_InitNew,
+    UnixFolder_IPersistPropertyBag_Load,
+    UnixFolder_IPersistPropertyBag_Save
+};
+
 static HRESULT WINAPI UnixFolder_ISFHelper_QueryInterface(ISFHelper* iface, REFIID riid, 
     void** ppvObject)
 {
@@ -1457,6 +1519,7 @@
     if(pUnixFolder) {
         pUnixFolder->lpIShellFolder2Vtbl = &UnixFolder_IShellFolder2_Vtbl;
         pUnixFolder->lpIPersistFolder3Vtbl = &UnixFolder_IPersistFolder3_Vtbl;
+        pUnixFolder->lpIPersistPropertyBagVtbl = &UnixFolder_IPersistPropertyBag_Vtbl;
         pUnixFolder->lpISFHelperVtbl = &UnixFolder_ISFHelper_Vtbl;
         pUnixFolder->m_cRef = 0;
         pUnixFolder->m_pszPath = NULL;
@@ -1480,6 +1543,11 @@
     return CreateUnixFolder(pUnkOuter, riid, ppv, PATHMODE_DOS, &CLSID_UnixDosFolder);
 }
 
+HRESULT WINAPI FolderShortcut_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv) {
+    TRACE("(pUnkOuter=%p, riid=%p, ppv=%p)\n", pUnkOuter, riid, ppv);
+    return CreateUnixFolder(pUnkOuter, riid, ppv, PATHMODE_DOS, &CLSID_FolderShortcut);
+}
+
 /******************************************************************************
  * UnixSubFolderIterator
  *