Moved some definitions to their proper include file.

diff --git a/include/mapidefs.h b/include/mapidefs.h
index 19f94ef..082f5d6 100644
--- a/include/mapidefs.h
+++ b/include/mapidefs.h
@@ -3,14 +3,21 @@
 
 #include "wintypes.h"
 
-typedef union tagCY CY;
-
-union tagCY{
+#ifndef _tagCY_DEFINED
+#define _tagCY_DEFINED
+typedef union tagCY
+{
    struct {
+#ifdef BIG_ENDIAN
+        long Hi;
+        long Lo;
+#else
       unsigned long Lo;
       long Hi;
+#endif
    } u;
    LONGLONG int64;
-};
+} CY;
+#endif /* _tagCY_DEFINED */
 
 #endif /*__WINE_MAPIDEFS_H*/
diff --git a/include/objbase.h b/include/objbase.h
index 3335a31..b41f35c 100644
--- a/include/objbase.h
+++ b/include/objbase.h
@@ -18,102 +18,5 @@
 /* the following depend on obj_moniker.h */
 #include "wine/obj_dataobject.h"
 
-/* FIXME: the following should be moved to one of the wine/obj_XXX.h headers */
-
-/*****************************************************************************
- * CoXXX API
- */
-/* FIXME: more CoXXX functions are missing */
-DWORD WINAPI CoBuildVersion(void);
-
-typedef enum tagCOINIT
-{
-    COINIT_APARTMENTTHREADED  = 0x2, /* Apartment model */
-    COINIT_MULTITHREADED      = 0x0, /* OLE calls objects on any thread */
-    COINIT_DISABLE_OLE1DDE    = 0x4, /* Don't use DDE for Ole1 support */
-    COINIT_SPEED_OVER_MEMORY  = 0x8  /* Trade memory for speed */
-} COINIT;
-
-HRESULT WINAPI CoInitialize16(LPVOID lpReserved);
-HRESULT WINAPI CoInitialize32(LPVOID lpReserved);
-#define CoInitialize WINELIB_NAME(CoInitialize)
-
-HRESULT WINAPI CoInitializeEx32(LPVOID lpReserved, DWORD dwCoInit);
-#define CoInitializeEx WINELIB_NAME(CoInitializeEx)
-
-void WINAPI CoUninitialize16(void);
-void WINAPI CoUninitialize32(void);
-#define CoUninitialize WINELIB_NAME(CoUninitialize)
-
-HRESULT WINAPI CoCreateGuid(GUID *pguid);
-
-/* class registration flags; passed to CoRegisterClassObject */
-typedef enum tagREGCLS
-{
-    REGCLS_SINGLEUSE = 0,
-    REGCLS_MULTIPLEUSE = 1,
-    REGCLS_MULTI_SEPARATE = 2,
-    REGCLS_SUSPENDED = 4
-} REGCLS;
-
-HRESULT WINAPI CoRegisterClassObject16(REFCLSID rclsid, LPUNKNOWN pUnk, DWORD dwClsContext, DWORD flags, LPDWORD lpdwRegister);
-HRESULT WINAPI CoRegisterClassObject32(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);
-#define CoRegisterClassObject WINELIB_NAME(CoRegisterClassObject)
-
-HRESULT WINAPI CoRevokeClassObject32(DWORD dwRegister);
-#define CoRevokeClassObject WINELIB_NAME(CoRevokeClassObject)
-
-HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext,LPVOID pvReserved, REFIID iid, LPVOID *ppv);
-
-
-HRESULT WINAPI CoCreateInstance(REFCLSID rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,REFIID iid,LPVOID *ppv);
-void WINAPI CoFreeLibrary(HINSTANCE32 hLibrary);
-void WINAPI CoFreeAllLibraries(void);
-void WINAPI CoFreeUnusedLibraries(void);
-HRESULT WINAPI CoFileTimeNow(FILETIME *lpFileTime);
-LPVOID WINAPI CoTaskMemAlloc(ULONG size);
-void WINAPI CoTaskMemFree(LPVOID ptr);
-HINSTANCE32 WINAPI CoLoadLibrary(LPOLESTR16 lpszLibName, BOOL32 bAutoFree);
-
-HRESULT WINAPI CoLockObjectExternal16(LPUNKNOWN pUnk,BOOL16 fLock,BOOL16 fLastUnlockReleases);
-HRESULT WINAPI CoLockObjectExternal32(LPUNKNOWN pUnk,BOOL32 fLock,BOOL32 fLastUnlockReleases);
-#define CoLockObjectExternal WINELIB_NAME(CoLockObjectExternal)
-
-
-/* internal Wine stuff */
-
-
-/*****************************************************************************
- * IClassFactory interface
- */
-
-typedef struct _IClassFactory {
-    /* IUnknown fields */
-    ICOM_VTABLE(IClassFactory)* lpvtbl;
-    DWORD                       ref;
-} _IClassFactory;
-
-HRESULT WINE_StringFromCLSID(const CLSID *id, LPSTR);
-
-
-/*****************************************************************************
- * IMalloc interface
- */
-/* private prototypes for the constructors */
-LPMALLOC16	IMalloc16_Constructor(void);
-LPMALLOC32	IMalloc32_Constructor(void);
-
-
-/*****************************************************************************
- * IUnknown interface
- */
-
-typedef struct _IUnknown {
-    /* IUnknown fields */
-    ICOM_VTABLE(IUnknown)* lpvtbl;
-    DWORD                  ref;
-} _IUnknown;
-
-LPUNKNOWN	IUnknown_Constructor(void);
 
 #endif /* __WINE_OBJBASE_H */
diff --git a/include/ole.h b/include/ole.h
index a71dfe5..5cd4d9c 100644
--- a/include/ole.h
+++ b/include/ole.h
@@ -19,7 +19,6 @@
 #define OLESTR32(x) L##x	/* probably wrong */
 #define OLESTR WINELIB_NAME(OLESTR)
 
-typedef unsigned short VARTYPE;
 typedef LONG DISPID;
 
 /* object types */
@@ -281,39 +280,4 @@
 void WINAPI CoFreeUnusedLibraries(void);
 void WINAPI CoFreeAllLibraries(void);
 
-typedef enum tagCALLCONV {
-    CC_CDECL		= 1,
-    CC_MSCPASCAL	= CC_CDECL + 1,
-    CC_PASCAL		= CC_MSCPASCAL,
-    CC_MACPASCAL	= CC_PASCAL + 1,
-    CC_STDCALL		= CC_MACPASCAL + 1,
-    CC_RESERVED		= CC_STDCALL + 1,
-    CC_SYSCALL		= CC_RESERVED + 1,
-    CC_MPWCDECL		= CC_SYSCALL + 1,
-    CC_MPWPASCAL	= CC_MPWCDECL + 1,
-    CC_MAX 		= CC_MPWPASCAL + 1
-} CALLCONV;
-
-typedef struct tagPARAMDATA {
-    OLECHAR16 * szName;    /* parameter name */
-    VARTYPE vt;         /* parameter type */
-} PARAMDATA, * LPPARAMDATA;
-
-typedef struct tagMETHODDATA {
-    OLECHAR16 * szName;    /* method name */
-    PARAMDATA * ppdata;  /* pointer to an array of PARAMDATAs */
-    DISPID dispid;      /* method ID */
-    UINT16 iMeth;         /* method index */
-    CALLCONV cc;        /* calling convention */
-    UINT16 cArgs;         /* count of arguments */
-    WORD wFlags;        /* same wFlags as on IDispatch::Invoke() */
-    VARTYPE vtReturn;
-} METHODDATA, * LPMETHODDATA;
-
-typedef struct tagINTERFACEDATA {
-    METHODDATA * pmethdata;  /* pointer to an array of METHODDATAs */
-    UINT16 cMembers;      /* count of members */
-} INTERFACEDATA, * LPINTERFACEDATA;
-
-
 #endif  /* __WINE_OLE_H */
diff --git a/include/oleauto.h b/include/oleauto.h
index ec344ff..483bbcf 100644
--- a/include/oleauto.h
+++ b/include/oleauto.h
@@ -150,14 +150,6 @@
  * Data types for Variants.
  */
 
-/*
- * 0 == FALSE and -1 == TRUE
- */
-typedef short VARIANT_BOOL;
-
-#define VARIANT_TRUE	 ((VARIANT_BOOL)0xFFFF)
-#define VARIANT_FALSE	 ((VARIANT_BOOL)0x0000)
-
 enum VARENUM {
 	VT_EMPTY = 0,
 	VT_NULL = 1,
@@ -830,4 +822,39 @@
 #define VarUintFromDec32	VarUI4FromDec32
 #define VarUintFromInt32	VarUI4FromI432
 
+
+typedef enum tagCALLCONV {
+    CC_CDECL		= 1,
+    CC_MSCPASCAL	= CC_CDECL + 1,
+    CC_PASCAL		= CC_MSCPASCAL,
+    CC_MACPASCAL	= CC_PASCAL + 1,
+    CC_STDCALL		= CC_MACPASCAL + 1,
+    CC_RESERVED		= CC_STDCALL + 1,
+    CC_SYSCALL		= CC_RESERVED + 1,
+    CC_MPWCDECL		= CC_SYSCALL + 1,
+    CC_MPWPASCAL	= CC_MPWCDECL + 1,
+    CC_MAX 		= CC_MPWPASCAL + 1
+} CALLCONV;
+
+typedef struct tagPARAMDATA {
+    OLECHAR16 * szName;    /* parameter name */
+    VARTYPE vt;         /* parameter type */
+} PARAMDATA, * LPPARAMDATA;
+
+typedef struct tagMETHODDATA {
+    OLECHAR16 * szName;    /* method name */
+    PARAMDATA * ppdata;  /* pointer to an array of PARAMDATAs */
+    DISPID dispid;      /* method ID */
+    UINT16 iMeth;         /* method index */
+    CALLCONV cc;        /* calling convention */
+    UINT16 cArgs;         /* count of arguments */
+    WORD wFlags;        /* same wFlags as on IDispatch::Invoke() */
+    VARTYPE vtReturn;
+} METHODDATA, * LPMETHODDATA;
+
+typedef struct tagINTERFACEDATA {
+    METHODDATA * pmethdata;  /* pointer to an array of METHODDATAs */
+    UINT16 cMembers;      /* count of members */
+} INTERFACEDATA, * LPINTERFACEDATA;
+
 #endif /*__WINE_OLEAUTO_H*/
diff --git a/include/winbase.h b/include/winbase.h
index a4c8ec1..7960fa9 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -164,28 +164,18 @@
     BOOL32  bInheritHandle;
 } SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
 
-typedef WORD SECURITY_DESCRIPTOR_CONTROL;
-
-/* The security descriptor structure */
-typedef struct {
-    BYTE Revision;
-    BYTE Sbz1;
-    SECURITY_DESCRIPTOR_CONTROL Control;
-    PSID Owner;
-    PSID Group;
-    PACL Sacl;
-    PACL Dacl;
-} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
-
 typedef DWORD SECURITY_INFORMATION;
 
 
+#ifndef _FILETIME_
+#define _FILETIME_
 /* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
 typedef struct
 {
   DWORD  dwLowDateTime;
   DWORD  dwHighDateTime;
 } FILETIME, *LPFILETIME;
+#endif /* _FILETIME_ */
 
 /* Find* structures */
 typedef struct
diff --git a/include/wine/obj_moniker.h b/include/wine/obj_moniker.h
index 91565dd..a41c165 100644
--- a/include/wine/obj_moniker.h
+++ b/include/wine/obj_moniker.h
@@ -35,7 +35,6 @@
 DEFINE_OLEGUID(IID_IRunningObjectTable,	0x00000010L, 0, 0);
 typedef struct IRunningObjectTable IRunningObjectTable,*LPRUNNINGOBJECTTABLE;
 
-typedef struct  COSERVERINFO COSERVERINFO; // must be defined !
 
 
 /*********************************************************************************
diff --git a/include/wine/obj_propertystorage.h b/include/wine/obj_propertystorage.h
index 837daa1..cec645c 100644
--- a/include/wine/obj_propertystorage.h
+++ b/include/wine/obj_propertystorage.h
@@ -25,28 +25,411 @@
 
 
 /*****************************************************************************
+ * Predeclare the structures
+ */
+
+typedef struct tagSTATPROPSETSTG STATPROPSETSTG;
+typedef struct tagSTATPROPSTG STATPROPSTG;
+
+
+/*****************************************************************************
+ * PROPSPEC structure
+ */
+
+// Reserved global Property IDs
+#define PID_DICTIONARY  ( 0 )
+
+#define PID_CODEPAGE    ( 0x1 )
+
+#define PID_FIRST_USABLE        ( 0x2 )
+
+#define PID_FIRST_NAME_DEFAULT  ( 0xfff )
+
+#define PID_LOCALE      ( 0x80000000 )
+
+#define PID_MODIFY_TIME ( 0x80000001 )
+
+#define PID_SECURITY    ( 0x80000002 )
+
+#define PID_ILLEGAL     ( 0xffffffff )
+
+// Property IDs for the SummaryInformation Property Set
+
+#define PIDSI_TITLE               0x00000002L  // VT_LPSTR
+#define PIDSI_SUBJECT             0x00000003L  // VT_LPSTR
+#define PIDSI_AUTHOR              0x00000004L  // VT_LPSTR
+#define PIDSI_KEYWORDS            0x00000005L  // VT_LPSTR
+#define PIDSI_COMMENTS            0x00000006L  // VT_LPSTR
+#define PIDSI_TEMPLATE            0x00000007L  // VT_LPSTR
+#define PIDSI_LASTAUTHOR          0x00000008L  // VT_LPSTR
+#define PIDSI_REVNUMBER           0x00000009L  // VT_LPSTR
+#define PIDSI_EDITTIME            0x0000000aL  // VT_FILETIME (UTC)
+#define PIDSI_LASTPRINTED         0x0000000bL  // VT_FILETIME (UTC)
+#define PIDSI_CREATE_DTM          0x0000000cL  // VT_FILETIME (UTC)
+#define PIDSI_LASTSAVE_DTM        0x0000000dL  // VT_FILETIME (UTC)
+#define PIDSI_PAGECOUNT           0x0000000eL  // VT_I4
+#define PIDSI_WORDCOUNT           0x0000000fL  // VT_I4
+#define PIDSI_CHARCOUNT           0x00000010L  // VT_I4
+#define PIDSI_THUMBNAIL           0x00000011L  // VT_CF
+#define PIDSI_APPNAME             0x00000012L  // VT_LPSTR
+#define PIDSI_DOC_SECURITY        0x00000013L  // VT_I4
+#define PRSPEC_INVALID  ( 0xffffffff )
+
+
+#define PRSPEC_LPWSTR   ( 0 )
+#define PRSPEC_PROPID   ( 1 )
+
+typedef struct tagPROPSPEC
+{
+    ULONG ulKind;
+    union 
+    {
+        PROPID propid;
+        LPOLESTR32 lpwstr;
+    } u;
+} PROPSPEC;
+
+
+/*****************************************************************************
+ * STATPROPSETSTG structure
+ */
+/* Macros for parsing the OS Version of the Property Set Header */
+#define PROPSETHDR_OSVER_KIND(dwOSVer)      HIWORD( (dwOSVer) )
+#define PROPSETHDR_OSVER_MAJOR(dwOSVer)     LOBYTE(LOWORD( (dwOSVer) ))
+#define PROPSETHDR_OSVER_MINOR(dwOSVer)     HIBYTE(LOWORD( (dwOSVer) ))
+#define PROPSETHDR_OSVERSION_UNKNOWN        0xFFFFFFFF
+
+struct tagSTATPROPSETSTG
+{
+    FMTID fmtid;
+    CLSID clsid;
+    DWORD grfFlags;
+    FILETIME mtime;
+    FILETIME ctime;
+    FILETIME atime;
+    DWORD dwOSVersion;
+};
+
+
+/*****************************************************************************
+ * STATPROPSTG structure
+ */
+struct tagSTATPROPSTG
+{
+    LPOLESTR32 lpwstrName;
+    PROPID propid;
+    VARTYPE vt;
+};
+
+
+/*****************************************************************************
  * IEnumSTATPROPSETSTG interface
  */
-/* FIXME: not implemented */
+#define ICOM_INTERFACE IEnumSTATPROPSETSTG
+#define IEnumSTATPROPSETSTG_METHODS \
+    ICOM_METHOD3(HRESULT,Next,  ULONG,celt, STATPROPSETSTG*,rgelt, ULONG*,pceltFethed); \
+    ICOM_METHOD1(HRESULT,Skip,  ULONG,celt); \
+    ICOM_METHOD (HRESULT,Reset); \
+    ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSETSTG**,ppenum);
+#define IEnumSTATPROPSETSTG_IMETHODS \
+    ICOM_INHERITS(IEnumSTATPROPSETSTG,IUnknown)
+ICOM_DEFINE(IEnumSTATPROPSETSTG,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IEnumSTATPROPSETSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IEnumSTATPROPSETSTG_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IEnumSTATPROPSETSTG_Release(p)            ICOM_CALL (Release,p)
+/*** IEnumSTATPROPSETSTG methods ***/
+#define IEnumSTATPROPSETSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
+#define IEnumSTATPROPSETSTG_Skip(p,a)     ICOM_CALL1(Skip,p,a)
+#define IEnumSTATPROPSETSTG_Reset(p)      ICOM_CALL (Reset,p)
+#define IEnumSTATPROPSETSTG_Clone(p,a)    ICOM_CALL1(Clone,p,a)
+#endif
 
 
 /*****************************************************************************
  * IEnumSTATPROPSTG interface
  */
-/* FIXME: not implemented */
+#define ICOM_INTERFACE IEnumSTATPROPSTG
+#define IEnumSTATPROPSTG_METHODS \
+    ICOM_METHOD3(HRESULT,Next,  ULONG,celt, STATPROPSTG*,rgelt, ULONG*,pceltFethed); \
+    ICOM_METHOD1(HRESULT,Skip,  ULONG,celt); \
+    ICOM_METHOD (HRESULT,Reset); \
+    ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSTG**,ppenum);
+#define IEnumSTATPROPSTG_IMETHODS \
+    ICOM_INHERITS(IEnumSTATPROPSTG,IUnknown)
+ICOM_DEFINE(IEnumSTATPROPSTG,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IEnumSTATPROPSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IEnumSTATPROPSTG_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IEnumSTATPROPSTG_Release(p)            ICOM_CALL (Release,p)
+/*** IEnumSTATPROPSTG methods ***/
+#define IEnumSTATPROPSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
+#define IEnumSTATPROPSTG_Skip(p,a)     ICOM_CALL1(Skip,p,a)
+#define IEnumSTATPROPSTG_Reset(p)      ICOM_CALL (Reset,p)
+#define IEnumSTATPROPSTG_Clone(p,a)    ICOM_CALL1(Clone,p,a)
+#endif
 
 
 /*****************************************************************************
  * IPropertySetStorage interface
  */
-/* FIXME: not implemented */
+#define ICOM_INTERFACE IPropertySetStorage
+#define IPropertySetStorage_METHODS \
+    ICOM_METHOD5(HRESULT,Create, REFFMTID,rfmtid, const CLSID*,pclsid, DWORD,grfFlags, DWORD,grfMode, IPropertyStorage**,ppprstg); \
+    ICOM_METHOD3(HRESULT,Open,   REFFMTID,rfmtid, DWORD,grfMode, IPropertyStorage**,ppprstg); \
+    ICOM_METHOD1(HRESULT,Delete, REFFMTID,rfmtid); \
+    ICOM_METHOD1(HRESULT,Enum,   IEnumSTATPROPSETSTG**,ppenum);
+#define IPropertySetStorage_IMETHODS \
+    ICOM_INHERITS(IPropertySetStorage,IUnknown)
+ICOM_DEFINE(IPropertySetStorage,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IPropertySetStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IPropertySetStorage_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IPropertySetStorage_Release(p)            ICOM_CALL (Release,p)
+/*** IPropertySetStorage methods ***/
+#define IPropertySetStorage_Create(p,a,b,c,d,e) ICOM_CALL5(Create,p,a,b,c,d,e)
+#define IPropertySetStorage_Open(p,a,b,c)       ICOM_CALL3(Open,p,a,b,c)
+#define IPropertySetStorage_Delete(p,a)         ICOM_CALL1(Delete,p,a)
+#define IPropertySetStorage_Enum(p,a)           ICOM_CALL1(Enum,p,a)
+#endif
 
 
 /*****************************************************************************
  * IPropertyStorage interface
  */
-/* FIXME: not implemented */
+typedef struct tagPROPVARIANT PROPVARIANT,*LPPROPVARIANT;
 
+// Flags for IPropertySetStorage::Create
+#define PROPSETFLAG_DEFAULT     ( 0 )
+#define PROPSETFLAG_NONSIMPLE   ( 1 )
+#define PROPSETFLAG_ANSI        ( 2 )
+
+typedef struct  tagCAUB
+{
+    ULONG cElems;
+    unsigned char *pElems;
+} CAUB;
+
+typedef struct tagCAI
+{
+    ULONG cElems;
+    short *pElems;
+} CAI;
+
+typedef struct tagCAUI
+{
+    ULONG cElems;
+    USHORT *pElems;
+} CAUI;
+
+typedef struct tagCAL
+{
+    ULONG cElems;
+    long *pElems;
+} CAL;
+
+typedef struct tagCAUL
+{
+    ULONG cElems;
+    ULONG *pElems;
+} CAUL;
+
+typedef struct tagCAFLT
+{
+    ULONG cElems;
+    float *pElems;
+} CAFLT;
+
+typedef struct tagCADBL
+{
+    ULONG cElems;
+    double *pElems;
+} CADBL;
+
+typedef struct tagCACY
+{
+    ULONG cElems;
+    CY *pElems;
+} CACY;
+
+typedef struct tagCADATE
+{
+    ULONG cElems;
+    DATE *pElems;
+} CADATE;
+
+typedef struct tagCABSTR
+{
+    ULONG cElems;
+    BSTR32 *pElems;
+} CABSTR;
+
+typedef struct tagCABOOL
+{
+    ULONG cElems;
+    VARIANT_BOOL *pElems;
+} CABOOL;
+
+typedef struct tagCASCODE
+{
+    ULONG cElems;
+    SCODE *pElems;
+} CASCODE;
+
+typedef struct tagCAPROPVARIANT
+{
+    ULONG cElems;
+    PROPVARIANT *pElems;
+} CAPROPVARIANT;
+
+typedef struct tagCAH
+{
+    ULONG cElems;
+    LARGE_INTEGER *pElems;
+} CAH;
+
+typedef struct tagCAUH
+{
+    ULONG cElems;
+    ULARGE_INTEGER *pElems;
+} CAUH;
+
+typedef struct tagCALPSTR
+{
+    ULONG cElems;
+    LPSTR *pElems;
+} CALPSTR;
+
+typedef struct tagCALPWSTR
+{
+    ULONG cElems;
+    LPWSTR *pElems;
+} CALPWSTR;
+
+typedef struct tagCAFILETIME
+{
+    ULONG cElems;
+    FILETIME *pElems;
+} CAFILETIME;
+
+typedef struct tagCACLIPDATA
+{
+    ULONG cElems;
+    CLIPDATA *pElems;
+} CACLIPDATA;
+
+typedef struct tagCACLSID
+{
+    ULONG cElems;
+    CLSID *pElems;
+} CACLSID;
+
+struct tagPROPVARIANT
+{
+    VARTYPE vt;
+    WORD wReserved1;
+    WORD wReserved2;
+    WORD wReserved3;
+    union 
+    {
+         /* Empty union arm */ 
+        UCHAR bVal;
+        short iVal;
+        USHORT uiVal;
+        VARIANT_BOOL boolVal;
+#ifndef __cplusplus
+       /* FIXME: bool is reserved in C++, how can we deal with that ? */
+        _VARIANT_BOOL bool;
+#endif
+        long lVal;
+        ULONG ulVal;
+        float fltVal;
+        SCODE scode;
+        LARGE_INTEGER hVal;
+        ULARGE_INTEGER uhVal;
+        double dblVal;
+        CY cyVal;
+        DATE date;
+        FILETIME filetime;
+        CLSID *puuid;
+        BLOB blob;
+        CLIPDATA *pclipdata;
+        IStream32 *pStream;
+        IStorage32 *pStorage;
+        BSTR32 bstrVal;
+        LPSTR pszVal;
+        LPWSTR pwszVal;
+        CAUB caub;
+        CAI cai;
+        CAUI caui;
+        CABOOL cabool;
+        CAL cal;
+        CAUL caul;
+        CAFLT caflt;
+        CASCODE cascode;
+        CAH cah;
+        CAUH cauh;
+        CADBL cadbl;
+        CACY cacy;
+        CADATE cadate;
+        CAFILETIME cafiletime;
+        CACLSID cauuid;
+        CACLIPDATA caclipdata;
+        CABSTR cabstr;
+        CALPSTR calpstr;
+        CALPWSTR calpwstr;
+        CAPROPVARIANT capropvar;
+    } u;
+};
+
+
+#define ICOM_INTERFACE IPropertyStorage
+#define IPropertyStorage_METHODS \
+    ICOM_METHOD3(HRESULT,ReadMultiple,        ULONG,cpspec, const PROPSPEC*,rgpspec, PROPVARIANT*,rgpropvar); \
+    ICOM_METHOD4(HRESULT,WriteMultiple,       ULONG,cpspec, const PROPSPEC*,rgpspec, const PROPVARIANT*,rgpropvar, PROPID,propidNameFirst); \
+    ICOM_METHOD2(HRESULT,DeleteMultiple,      ULONG,cpspec, const PROPSPEC*,rgpspec); \
+    ICOM_METHOD2(HRESULT,ReadPropertyNames,   const PROPID*,rgpropid, LPOLESTR32*,rglpwstrName); \
+    ICOM_METHOD3(HRESULT,WritePropertyNames,  ULONG,cpropid, const PROPID*,rgpropid, LPOLESTR32*,rglpwstrName); \
+    ICOM_METHOD2(HRESULT,DeletePropertyNames, ULONG,cpropid, const PROPID*,rgpropid); \
+    ICOM_METHOD1(HRESULT,Commit,              DWORD,grfCommitFlags); \
+    ICOM_METHOD (HRESULT,Revert); \
+    ICOM_METHOD1(HRESULT,Enum,                IEnumSTATPROPSTG**,ppenum); \
+    ICOM_METHOD3(HRESULT,SetTimes,            const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime); \
+    ICOM_METHOD1(HRESULT,SetClass,            REFCLSID,clsid); \
+    ICOM_METHOD1(HRESULT,Stat,                STATPROPSETSTG*,pstatpsstg);
+#define IPropertyStorage_IMETHODS \
+    ICOM_INHERITS(IPropertyStorage,IUnknown)
+ICOM_DEFINE(IPropertyStorage,IUnknown)
+#undef ICOM_INTERFACE
+
+#ifdef ICOM_CINTERFACE
+/*** IUnknown methods ***/
+#define IPropertyStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IPropertyStorage_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IPropertyStorage_Release(p)            ICOM_CALL (Release,p)
+/*** IPropertyStorage methods ***/
+#define IPropertyStorage_ReadMultiple(p,a,b,c)       ICOM_CALL3(ReadMultiple,p,a,b,c)
+#define IPropertyStorage_WriteMultiple(p,a,b,c,d)    ICOM_CALL4(WriteMultiple,p,a,b,c,d)
+#define IPropertyStorage_DeleteMultiple(p,a,b)       ICOM_CALL2(DeleteMultiple,p,a,b)
+#define IPropertyStorage_ReadPropertyNames(p,a,b)    ICOM_CALL2(ReadPropertyNames,p,a,b)
+#define IPropertyStorage_WritePropertyNames(p,a,b,c) ICOM_CALL3(WritePropertyNames,p,a,b,c)
+#define IPropertyStorage_DeletePropertyNames(p,a,b)  ICOM_CALL2(DeletePropertyNames,p,a,b)
+#define IPropertyStorage_Commit(p,a)                 ICOM_CALL1(Commit,p,a)
+#define IPropertyStorage_Revert(p)                   ICOM_CALL (Revert,p)
+#define IPropertyStorage_Enum(p,a)                   ICOM_CALL1(Enum,p,a)
+#define IPropertyStorage_SetTimes(p,a,b,c)           ICOM_CALL3(SetTimes,p,a,b,c)
+#define IPropertyStorage_SetClass(p,a)               ICOM_CALL1(SetClass,p,a)
+#define IPropertyStorage_Stat(p,a)                   ICOM_CALL1(Stat,p,a)
+#endif
 
 
 #endif /* __WINE_WINE_OBJ_PROPERTYSTORAGE_H */
diff --git a/include/winnt.h b/include/winnt.h
index 601c85a..4f125cb 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -315,17 +315,6 @@
   PCONTEXT           ContextRecord;
 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
 
-typedef struct {
-    BYTE Value[6];
-} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
-
-typedef struct _SID {
-    BYTE Revision;
-    BYTE SubAuthorityCount;
-    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
-    DWORD SubAuthority[1];
-} SID,*PSID;
-
 
 #pragma pack(4)
 /*
@@ -366,6 +355,47 @@
   TokenStatistics 
 } TOKEN_INFORMATION_CLASS; 
 
+#ifndef _SECURITY_DEFINED
+#define _SECURITY_DEFINED
+
+typedef struct {
+    BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
+
+typedef struct _SID {
+    BYTE Revision;
+    BYTE SubAuthorityCount;
+    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+    DWORD SubAuthority[1];
+} SID,*PSID;
+
+/* 
+ * ACL 
+ */
+
+typedef struct _ACL {
+    BYTE AclRevision;
+    BYTE Sbz1;
+    WORD AclSize;
+    WORD AceCount;
+    WORD Sbz2;
+} ACL, *PACL;
+
+typedef WORD SECURITY_DESCRIPTOR_CONTROL;
+
+/* The security descriptor structure */
+typedef struct {
+    BYTE Revision;
+    BYTE Sbz1;
+    SECURITY_DESCRIPTOR_CONTROL Control;
+    PSID Owner;
+    PSID Group;
+    PACL Sacl;
+    PACL Dacl;
+} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
+
+#endif /* _SECURITY_DEFINED */
+
 /* 
  * SID_AND_ATTRIBUTES
  */
@@ -441,18 +471,6 @@
 } TOKEN_PRIMARY_GROUP; 
 
 /*
- * ACL 
- */
-
-typedef struct _ACL {
-    BYTE AclRevision;
-    BYTE Sbz1;
-    WORD AclSize;
-    WORD AceCount;
-    WORD Sbz2;
-} ACL, *PACL;
-
-/*
  * TOKEN_DEFAULT_DACL
  */
 
@@ -490,6 +508,7 @@
 } SECURITY_IMPERSONATION_LEVEL; 
 
 
+
 /*
  * TOKEN_STATISTICS
  */
diff --git a/include/wintypes.h b/include/wintypes.h
index e2445b4..8091331 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -106,7 +106,6 @@
 typedef unsigned short  BOOL16;
 typedef int             BOOL32;
 typedef double          DATE;
-typedef long		SCODE;
 typedef long            LONG_PTR;
 typedef unsigned long   ULONG_PTR;
 typedef double          DOUBLE;
diff --git a/include/wtypes.h b/include/wtypes.h
index 5e66faa..a0833a4 100644
--- a/include/wtypes.h
+++ b/include/wtypes.h
@@ -8,6 +8,13 @@
 
 #include "wintypes.h"
 
+/* FIXME: this line should be in rpcndr.h */
+typedef unsigned char byte;
+
+/* FIXME: and the following group should be in rpcdce.h */
+typedef void* RPC_AUTH_IDENTITY_HANDLE;
+typedef void* RPC_AUTHZ_HANDLE;
+
 
 typedef WORD CLIPFORMAT32, *LPCLIPFORMAT32;
 DECL_WINELIB_TYPE(CLIPFORMAT)
@@ -64,6 +71,36 @@
 DECLARE_HANDLE(HMETAFILEPICT);
 #undef DECLARE_HANDLE
 
+typedef struct _COAUTHIDENTITY
+{
+    USHORT* User;
+    ULONG UserLength;
+    USHORT* Domain;
+    ULONG DomainLength;
+    USHORT* Password;
+    ULONG PasswordLength;
+    ULONG Flags;
+} COAUTHIDENTITY;
+
+typedef struct _COAUTHINFO
+{
+    DWORD dwAuthnSvc;
+    DWORD dwAuthzSvc;
+    LPWSTR pwszServerPrincName;
+    DWORD dwAuthnLevel;
+    DWORD dwImpersonationLevel;
+    COAUTHIDENTITY* pAuthIdentityData;
+    DWORD dwCapabilities;
+} COAUTHINFO;
+
+typedef struct _COSERVERINFO
+{
+    DWORD dwReserved1;
+    LPWSTR pwszName;
+    COAUTHINFO* pAuthInfo;
+    DWORD dwReserved2;
+} COSERVERINFO;
+
 typedef enum tagCLSCTX
 {
     CLSCTX_INPROC_SERVER     = 0x1,
@@ -80,5 +117,102 @@
 #define CLSCTX_ALL              (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
 #define CLSCTX_SERVER           (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
 
+typedef unsigned short VARTYPE;
+
+typedef ULONG PROPID;
+
+typedef struct tagBLOB
+{
+    ULONG cbSize;
+    BYTE *pBlobData;
+} BLOB;
+
+#ifndef _tagCY_DEFINED
+#define _tagCY_DEFINED
+typedef union tagCY
+{
+    struct {
+#ifdef BIG_ENDIAN
+        long Hi;
+        long Lo;
+#else
+        unsigned long Lo;
+        long Hi;
+#endif
+    } u;
+    LONGLONG int64;
+} CY;
+#endif /* _tagCY_DEFINED */
+
+/*
+ * 0 == FALSE and -1 == TRUE
+ */
+#define VARIANT_TRUE     ((VARIANT_BOOL)0xFFFF)
+#define VARIANT_FALSE    ((VARIANT_BOOL)0x0000)
+typedef short VARIANT_BOOL,_VARIANT_BOOL;
+
+typedef struct tagCLIPDATA
+{
+    ULONG cbSize;
+    long ulClipFmt;
+    BYTE *pClipData;
+} CLIPDATA;
+
+// Macro to calculate the size of the above pClipData
+#define CBPCLIPDATA(clipdata)    ( (clipdata).cbSize - sizeof((clipdata).ulClipFmt) )
+
+typedef LONG SCODE;
+
+#ifndef _FILETIME_
+#define _FILETIME_
+/* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
+typedef struct
+{
+  DWORD  dwLowDateTime;
+  DWORD  dwHighDateTime;
+} FILETIME, *LPFILETIME;
+#endif /* _FILETIME_ */
+
+#ifndef _SECURITY_DEFINED
+#define _SECURITY_DEFINED
+
+typedef struct {
+    BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
+
+typedef struct _SID {
+    BYTE Revision;
+    BYTE SubAuthorityCount;
+    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+    DWORD SubAuthority[1];
+} SID,*PSID;
+
+/*
+ * ACL 
+ */
+
+typedef struct _ACL {
+    BYTE AclRevision;
+    BYTE Sbz1;
+    WORD AclSize;
+    WORD AceCount;
+    WORD Sbz2;
+} ACL, *PACL;
+
+typedef WORD SECURITY_DESCRIPTOR_CONTROL;
+
+/* The security descriptor structure */
+typedef struct {
+    BYTE Revision;
+    BYTE Sbz1;
+    SECURITY_DESCRIPTOR_CONTROL Control;
+    PSID Owner;
+    PSID Group;
+    PACL Sacl;
+    PACL Dacl;
+} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
+
+#endif /* _SECURITY_DEFINED */
+
 
 #endif /* __WINE_WTYPES_H */
diff --git a/ole/compobj.c b/ole/compobj.c
index ff7ee36..73a4153 100644
--- a/ole/compobj.c
+++ b/ole/compobj.c
@@ -43,7 +43,9 @@
 #include "ldt.h"
 #include "winreg.h"
 
-#include "objbase.h"
+#include "wine/obj_base.h"
+#include "wine/obj_misc.h"
+#include "wine/obj_clientserver.h"
 
 #include "ifs.h"