diff --git a/dlls/dmime/dmime_main.c b/dlls/dmime/dmime_main.c
index 7596ec0..2532ed1 100644
--- a/dlls/dmime/dmime_main.c
+++ b/dlls/dmime/dmime_main.c
@@ -1,6 +1,7 @@
 /* DirectMusicInteractiveEngine Main
  *
  * Copyright (C) 2003-2004 Rok Mandeljc
+ * Copyright (C) 2003-2004 Raphael Junqueira
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h
index abaa066..5a54fb8 100644
--- a/dlls/dmime/dmime_private.h
+++ b/dlls/dmime/dmime_private.h
@@ -643,6 +643,8 @@
 
   /* IDirectMusicSegTriggerTrack fields */
   LPDMUS_OBJECTDESC pDesc;
+  DMUS_IO_SEGMENT_ITEM_HEADER header;
+  WCHAR wszName[DMUS_MAX_NAME];
 };
 
 /* IUnknown: */
diff --git a/dlls/dmime/performance.c b/dlls/dmime/performance.c
index 6ac7046..a7887b1 100644
--- a/dlls/dmime/performance.c
+++ b/dlls/dmime/performance.c
@@ -1,6 +1,7 @@
 /* IDirectMusicPerformance Implementation
  *
  * Copyright (C) 2003-2004 Rok Mandeljc
+ * Copyright (C) 2003-2004 Raphael Junqueira
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c
index aef5809..df2c891 100644
--- a/dlls/dmime/segment.c
+++ b/dlls/dmime/segment.c
@@ -1,6 +1,7 @@
 /* IDirectMusicSegment8 Implementation
  *
  * Copyright (C) 2003-2004 Rok Mandeljc
+ * Copyright (C) 2003-2004 Raphael Junqueira
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -684,10 +685,10 @@
     case DMUS_FOURCC_TRACK_CHUNK: {
       TRACE_(dmfile)(": track chunck\n");
       IStream_Read (pStm, &track_hdr, sizeof(DMUS_IO_TRACK_HEADER), NULL);
-      TRACE_(dmfile)("class: %s\n", debugstr_guid (&track_hdr.guidClassID));
-      TRACE_(dmfile)("dwGroup: %ld\n", track_hdr.dwGroup);
-      TRACE_(dmfile)("ckid: %s\n", debugstr_fourcc (track_hdr.ckid));
-      TRACE_(dmfile)("fccType: %s\n", debugstr_fourcc (track_hdr.fccType));
+      TRACE_(dmfile)(" - class: %s\n", debugstr_guid (&track_hdr.guidClassID));
+      TRACE_(dmfile)(" - dwGroup: %ld\n", track_hdr.dwGroup);
+      TRACE_(dmfile)(" - ckid: %s\n", debugstr_fourcc (track_hdr.ckid));
+      TRACE_(dmfile)(" - fccType: %s\n", debugstr_fourcc (track_hdr.fccType));
       break;
     }
     case DMUS_FOURCC_TRACK_EXTRAS_CHUNK: {
diff --git a/dlls/dmime/segtriggertrack.c b/dlls/dmime/segtriggertrack.c
index cec615d..6385c4d 100644
--- a/dlls/dmime/segtriggertrack.c
+++ b/dlls/dmime/segtriggertrack.c
@@ -1,6 +1,7 @@
 /* IDirectMusicSegTriggerTrack Implementation
  *
  * Copyright (C) 2003-2004 Rok Mandeljc
+ * Copyright (C) 2003-2004 Raphael Junqueira
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -225,8 +226,9 @@
 
 HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
   ICOM_THIS_MULTI(IDirectMusicSegment8Impl, PersistStreamVtbl, iface);
-  FIXME("(%p, %p): stub\n", This, pClassID);
-  return E_NOTIMPL;
+  TRACE("(%p, %p)\n", This, pClassID);
+  memcpy(pClassID, &CLSID_DirectMusicSegTriggerTrack, sizeof(CLSID));
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
@@ -256,14 +258,17 @@
     switch (Chunk.fccID) { 
     case DMUS_FOURCC_SEGMENTITEM_CHUNK: {
       TRACE_(dmfile)(": segment item chunk\n");
-      liMove.QuadPart = Chunk.dwSize;
-      IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+      IStream_Read (pStm, &This->header, sizeof(DMUS_IO_SEGMENT_ITEM_HEADER), NULL);
+      TRACE_(dmfile)(" - lTimePhysical: %lu\n", This->header.lTimeLogical);
+      TRACE_(dmfile)(" - lTimePhysical: %lu\n", This->header.lTimePhysical);
+      TRACE_(dmfile)(" - dwPlayFlags: 0x%08lx\n", This->header.dwPlayFlags);
+      TRACE_(dmfile)(" - dwFlags: 0x%08lx\n", This->header.dwFlags);
       break;
     }
     case DMUS_FOURCC_SEGMENTITEMNAME_CHUNK: {
       TRACE_(dmfile)(": segment item name chunk\n");
-      liMove.QuadPart = Chunk.dwSize;
-      IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+      IStream_Read (pStm, This->wszName, Chunk.dwSize, NULL);
+      TRACE_(dmfile)(" - name: %s \n", debugstr_w(This->wszName));
       break;
     }
     case FOURCC_LIST: {
@@ -275,6 +280,12 @@
 	/**
 	 * should be a DMRF (DirectMusic Reference) list @TODO
 	 */
+      case DMUS_FOURCC_REF_LIST: {
+	FIXME_(dmfile)(": DMRF (DM References) list, not yet handled\n");
+	liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+	IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+	break;						
+      }
       default: {
 	TRACE_(dmfile)(": unknown (skipping)\n");
 	liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
@@ -359,7 +370,7 @@
   LARGE_INTEGER liMove; /* used when skipping chunks */
 
   if (pChunk->fccID != DMUS_FOURCC_SEGTRACK_LIST) {
-    ERR_(dmfile)(": %s chunk should be a TRACK list\n", debugstr_fourcc (pChunk->fccID));
+    ERR_(dmfile)(": %s chunk should be a SEGTRACK list\n", debugstr_fourcc (pChunk->fccID));
     return E_FAIL;
   }  
 
@@ -411,7 +422,6 @@
   return S_OK;
 }
 
-
 HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
   ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);
 
@@ -433,11 +443,6 @@
       TRACE_(dmfile)(": segment trigger track list\n");
       hr = IDirectMusicSegTriggerTrack_IPersistStream_ParseSegTrackList (iface, &Chunk, pStm, This);
       if (FAILED(hr)) return hr;
-      /*
-	liMove.QuadPart = Chunk.dwSize;
-	IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
-      */
-      
       break;    
     }
     default: {
@@ -463,23 +468,27 @@
 }
 
 HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+  ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);
+  FIXME("(%p): Saving not implemented yet\n", This);
   return E_NOTIMPL;
 }
 
 HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+  ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);
+  FIXME("(%p, %p): stub\n", This, pcbSize);
   return E_NOTIMPL;
 }
 
 ICOM_VTABLE(IPersistStream) DirectMusicSegTriggerTrack_PersistStream_Vtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-	IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface,
-	IDirectMusicSegTriggerTrack_IPersistStream_AddRef,
-	IDirectMusicSegTriggerTrack_IPersistStream_Release,
-	IDirectMusicSegTriggerTrack_IPersistStream_GetClassID,
-	IDirectMusicSegTriggerTrack_IPersistStream_IsDirty,
-	IDirectMusicSegTriggerTrack_IPersistStream_Load,
-	IDirectMusicSegTriggerTrack_IPersistStream_Save,
-	IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax
+  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+  IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface,
+  IDirectMusicSegTriggerTrack_IPersistStream_AddRef,
+  IDirectMusicSegTriggerTrack_IPersistStream_Release,
+  IDirectMusicSegTriggerTrack_IPersistStream_GetClassID,
+  IDirectMusicSegTriggerTrack_IPersistStream_IsDirty,
+  IDirectMusicSegTriggerTrack_IPersistStream_Load,
+  IDirectMusicSegTriggerTrack_IPersistStream_Save,
+  IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax
 };
 
 /* for ClassFactory */
diff --git a/dlls/dmscript/script.c b/dlls/dmscript/script.c
index 54524c6..ce676bb 100644
--- a/dlls/dmscript/script.c
+++ b/dlls/dmscript/script.c
@@ -1,6 +1,7 @@
 /* IDirectMusicScript
  *
  * Copyright (C) 2003-2004 Rok Mandeljc
+ * Copyright (C) 2003-2004 Raphael Junqueira
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -114,8 +115,8 @@
   ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
   FIXME("(%p, %s, %p): stub\n", This, debugstr_w(pwszRoutineName), pErrorInfo);
   /*return E_NOTIMPL;*/
-  /*return S_OK;*/
-  return E_FAIL;
+  return S_OK;
+  /*return E_FAIL;*/
 }
 
 HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
@@ -391,37 +392,42 @@
 }
 
 ICOM_VTABLE(IDirectMusicObject) DirectMusicScript_Object_Vtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-	IDirectMusicScriptImpl_IDirectMusicObject_QueryInterface,
-	IDirectMusicScriptImpl_IDirectMusicObject_AddRef,
-	IDirectMusicScriptImpl_IDirectMusicObject_Release,
-	IDirectMusicScriptImpl_IDirectMusicObject_GetDescriptor,
-	IDirectMusicScriptImpl_IDirectMusicObject_SetDescriptor,
-	IDirectMusicScriptImpl_IDirectMusicObject_ParseDescriptor
+  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+  IDirectMusicScriptImpl_IDirectMusicObject_QueryInterface,
+  IDirectMusicScriptImpl_IDirectMusicObject_AddRef,
+  IDirectMusicScriptImpl_IDirectMusicObject_Release,
+  IDirectMusicScriptImpl_IDirectMusicObject_GetDescriptor,
+  IDirectMusicScriptImpl_IDirectMusicObject_SetDescriptor,
+  IDirectMusicScriptImpl_IDirectMusicObject_ParseDescriptor
 };
 
 /* IDirectMusicScriptImpl IPersistStream part: */
 HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
-	ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
-	return IDirectMusicScriptImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+  ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+  return IDirectMusicScriptImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
 }
 
 ULONG WINAPI IDirectMusicScriptImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
-	ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
-	return IDirectMusicScriptImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+  ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+  return IDirectMusicScriptImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
 ULONG WINAPI IDirectMusicScriptImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
-	ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
-	return IDirectMusicScriptImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+  ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+  return IDirectMusicScriptImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
 HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
-	return E_NOTIMPL;
+  ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+  TRACE("(%p, %p)\n", This, pClassID);
+  memcpy(pClassID, &CLSID_DirectMusicScript, sizeof(CLSID));
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
-	return E_NOTIMPL;
+  ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);  
+  FIXME("(%p): stub, always S_FALSE\n", This);
+  return S_FALSE;
 }
 
 HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
diff --git a/dlls/dmstyle/chordtrack.c b/dlls/dmstyle/chordtrack.c
index f295aad..0e7d2b1 100644
--- a/dlls/dmstyle/chordtrack.c
+++ b/dlls/dmstyle/chordtrack.c
@@ -1,6 +1,7 @@
 /* IDirectMusicChordTrack Implementation
  *
  * Copyright (C) 2003-2004 Rok Mandeljc
+ * Copyright (C) 2003-2004 Raphael Junqueira
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -66,199 +67,321 @@
 }
 
 ICOM_VTABLE(IUnknown) DirectMusicChordTrack_Unknown_Vtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-	IDirectMusicChordTrack_IUnknown_QueryInterface,
-	IDirectMusicChordTrack_IUnknown_AddRef,
-	IDirectMusicChordTrack_IUnknown_Release
+  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+  IDirectMusicChordTrack_IUnknown_QueryInterface,
+  IDirectMusicChordTrack_IUnknown_AddRef,
+  IDirectMusicChordTrack_IUnknown_Release
 };
 
 /* IDirectMusicChordTrack IDirectMusicTrack8 part: */
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
 }
 
 ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
 ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
-HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %p): stub\n", This, pSegment);
-	return S_OK;
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) {
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %p): stub\n", This, pSegment);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
 {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
 {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %p): stub\n", This, pStateData);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %p): stub\n", This, pStateData);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
 {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-
-	TRACE("(%p, %s): ", This, debugstr_dmguid(rguidType));
-	if (IsEqualGUID (rguidType, &GUID_BandParam)
-		|| IsEqualGUID (rguidType, &GUID_ChordParam)
-		|| IsEqualGUID (rguidType, &GUID_RhythmParam)) {
-		TRACE("param supported\n");
-		return S_OK;
-	}
-	TRACE("param unsupported\n");
-	return DMUS_E_TYPE_UNSUPPORTED;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  
+  TRACE("(%p, %s): ", This, debugstr_dmguid(rguidType));
+  if (IsEqualGUID (rguidType, &GUID_BandParam)
+      || IsEqualGUID (rguidType, &GUID_ChordParam)
+      || IsEqualGUID (rguidType, &GUID_RhythmParam)) {
+    TRACE("param supported\n");
+    return S_OK;
+  }
+  TRACE("param unsupported\n");
+  return DMUS_E_TYPE_UNSUPPORTED;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType), rtTime, pParam, pStateData, dwFlags);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType), rtTime, pParam, pStateData, dwFlags);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
-	FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+  FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
+  return S_OK;
 }
 
 ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordTrack_Track_Vtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-	IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface,
-	IDirectMusicChordTrack_IDirectMusicTrack_AddRef,
-	IDirectMusicChordTrack_IDirectMusicTrack_Release,
-	IDirectMusicChordTrack_IDirectMusicTrack_Init,
-	IDirectMusicChordTrack_IDirectMusicTrack_InitPlay,
-	IDirectMusicChordTrack_IDirectMusicTrack_EndPlay,
-	IDirectMusicChordTrack_IDirectMusicTrack_Play,
-	IDirectMusicChordTrack_IDirectMusicTrack_GetParam,
-	IDirectMusicChordTrack_IDirectMusicTrack_SetParam,
-	IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported,
-	IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType,
-	IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType,
-	IDirectMusicChordTrack_IDirectMusicTrack_Clone,
-	IDirectMusicChordTrack_IDirectMusicTrack_PlayEx,
-	IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx,
-	IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx,
-	IDirectMusicChordTrack_IDirectMusicTrack_Compose,
-	IDirectMusicChordTrack_IDirectMusicTrack_Join
+  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+  IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface,
+  IDirectMusicChordTrack_IDirectMusicTrack_AddRef,
+  IDirectMusicChordTrack_IDirectMusicTrack_Release,
+  IDirectMusicChordTrack_IDirectMusicTrack_Init,
+  IDirectMusicChordTrack_IDirectMusicTrack_InitPlay,
+  IDirectMusicChordTrack_IDirectMusicTrack_EndPlay,
+  IDirectMusicChordTrack_IDirectMusicTrack_Play,
+  IDirectMusicChordTrack_IDirectMusicTrack_GetParam,
+  IDirectMusicChordTrack_IDirectMusicTrack_SetParam,
+  IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported,
+  IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType,
+  IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType,
+  IDirectMusicChordTrack_IDirectMusicTrack_Clone,
+  IDirectMusicChordTrack_IDirectMusicTrack_PlayEx,
+  IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx,
+  IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx,
+  IDirectMusicChordTrack_IDirectMusicTrack_Compose,
+  IDirectMusicChordTrack_IDirectMusicTrack_Join
 };
 
 /* IDirectMusicChordTrack IPersistStream part: */
 HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
-	return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+  return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
 }
 
 ULONG WINAPI IDirectMusicChordTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
-	return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+  return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
 ULONG WINAPI IDirectMusicChordTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
-	ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
-	return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+  return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
-	return E_NOTIMPL;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+  TRACE("(%p, %p)\n", This, pClassID);
+  memcpy(pClassID, &CLSID_DirectMusicChordTrack, sizeof(CLSID));
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
-	return E_NOTIMPL;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+  FIXME("(%p): stub, always S_FALSE\n", This);
+  return S_FALSE;
+}
+
+static HRESULT IDirectMusicChordTrack_IPersistStream_ParseChordTrackList (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm, IDirectMusicChordTrack* This) {
+
+  DMUS_PRIVATE_CHUNK Chunk;
+  DWORD ListSize[3], ListCount[3];
+  LARGE_INTEGER liMove; /* used when skipping chunks */
+
+  if (pChunk->fccID != DMUS_FOURCC_CHORDTRACK_LIST) {
+    ERR_(dmfile)(": %s chunk should be a CHORDTRACK list\n", debugstr_fourcc (pChunk->fccID));
+    return E_FAIL;
+  }  
+
+  ListSize[0] = pChunk->dwSize - sizeof(FOURCC);
+  ListCount[0] = 0;
+
+  do {
+    IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+    ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+    TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+    switch (Chunk.fccID) { 
+    case DMUS_FOURCC_CHORDTRACKHEADER_CHUNK: {
+      FIXME_(dmfile)(": Chord track header chunk\n");
+      IStream_Read (pStm, &This->dwScale, sizeof(DWORD), NULL);
+      TRACE_(dmfile)(" - dwScale: %ld\n", This->dwScale);
+      break;
+    }
+    case DMUS_FOURCC_CHORDTRACKBODY_CHUNK: {
+      DWORD sz;
+      DWORD it;
+      DWORD num;
+      DMUS_IO_CHORD body;
+      DMUS_IO_SUBCHORD subchords;
+
+      FIXME_(dmfile)(": Chord track body chunk\n");
+
+      IStream_Read (pStm, &sz, sizeof(DWORD), NULL);
+      TRACE_(dmfile)(" - sizeof(DMUS_IO_CHORD): %ld\n", sz);
+      if (sz != sizeof(DMUS_IO_CHORD)) return E_FAIL;
+      IStream_Read (pStm, &body, sizeof(DMUS_IO_CHORD), NULL);
+      TRACE_(dmfile)(" - wszName: %s\n", debugstr_w(body.wszName));
+      TRACE_(dmfile)(" - mtTime: %lu\n", body.mtTime);
+      TRACE_(dmfile)(" - wMeasure: %u\n", body.wMeasure);
+      TRACE_(dmfile)(" - bBeat:  %u\n", body.bBeat);
+      TRACE_(dmfile)(" - bFlags: 0x%02x\n", body.bFlags);
+      
+      IStream_Read (pStm, &num, sizeof(DWORD), NULL);
+      TRACE_(dmfile)(" - # DMUS_IO_SUBCHORDS: %ld\n", num);
+      IStream_Read (pStm, &sz, sizeof(DWORD), NULL);
+      TRACE_(dmfile)(" - sizeof(DMUS_IO_SUBCHORDS): %ld\n", sz);
+      if (sz != sizeof(DMUS_IO_SUBCHORD)) return E_FAIL;
+
+      for (it = 0; it < num; ++it) {
+	IStream_Read (pStm, &subchords, sizeof(DMUS_IO_SUBCHORD), NULL);
+	TRACE_(dmfile)("DMUS_IO_SUBCHORD #%ld\n", it);
+	TRACE_(dmfile)(" - dwChordPattern: %lu\n", subchords.dwChordPattern);
+	TRACE_(dmfile)(" - dwScalePattern: %lu\n", subchords.dwScalePattern);
+	TRACE_(dmfile)(" - dwInversionPoints: %lu\n", subchords.dwInversionPoints);
+	TRACE_(dmfile)(" - dwLevels: %lu\n", subchords.dwLevels);
+	TRACE_(dmfile)(" - bChordRoot:  %u\n", subchords.bChordRoot);
+	TRACE_(dmfile)(" - bScaleRoot: %u\n", subchords.bScaleRoot);
+      }
+      break;
+    }
+    default: {
+      TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+      liMove.QuadPart = Chunk.dwSize;
+      IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+      break;		
+    }
+    }
+    TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+  } while (ListCount[0] < ListSize[0]);
+
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
-	FIXME(": Loading not implemented yet\n");
-	return S_OK;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+ 
+  DMUS_PRIVATE_CHUNK Chunk;
+  LARGE_INTEGER liMove;
+  HRESULT hr;
+ 
+  FIXME(": Loading not fully implemented yet\n");
+
+  IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+  TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+  switch (Chunk.fccID) {	
+  case FOURCC_LIST: {
+    IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+    TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+    switch (Chunk.fccID) { 
+    case DMUS_FOURCC_CHORDTRACK_LIST: {
+      TRACE_(dmfile)(": Chord track list\n");
+      hr = IDirectMusicChordTrack_IPersistStream_ParseChordTrackList (iface, &Chunk, pStm, This);
+      if (FAILED(hr)) return hr;
+      break;    
+    }
+    default: {
+      TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+      liMove.QuadPart = Chunk.dwSize;
+      IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+      return E_FAIL;
+    }
+    }
+    TRACE_(dmfile)(": reading finished\n");
+    break;
+  }
+  default: {
+    TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+    liMove.QuadPart = Chunk.dwSize;
+    IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+    return E_FAIL;
+  }
+  }  
+
+
+  return S_OK;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
-	return E_NOTIMPL;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+  FIXME("(%p): Saving not implemented yet\n", This);
+  return E_NOTIMPL;
 }
 
 HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
-	return E_NOTIMPL;
+  ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+  FIXME("(%p, %p): stub\n", This, pcbSize);
+  return E_NOTIMPL;
 }
 
 ICOM_VTABLE(IPersistStream) DirectMusicChordTrack_PersistStream_Vtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-	IDirectMusicChordTrack_IPersistStream_QueryInterface,
-	IDirectMusicChordTrack_IPersistStream_AddRef,
-	IDirectMusicChordTrack_IPersistStream_Release,
-	IDirectMusicChordTrack_IPersistStream_GetClassID,
-	IDirectMusicChordTrack_IPersistStream_IsDirty,
-	IDirectMusicChordTrack_IPersistStream_Load,
-	IDirectMusicChordTrack_IPersistStream_Save,
-	IDirectMusicChordTrack_IPersistStream_GetSizeMax
+  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+  IDirectMusicChordTrack_IPersistStream_QueryInterface,
+  IDirectMusicChordTrack_IPersistStream_AddRef,
+  IDirectMusicChordTrack_IPersistStream_Release,
+  IDirectMusicChordTrack_IPersistStream_GetClassID,
+  IDirectMusicChordTrack_IPersistStream_IsDirty,
+  IDirectMusicChordTrack_IPersistStream_Load,
+  IDirectMusicChordTrack_IPersistStream_Save,
+  IDirectMusicChordTrack_IPersistStream_GetSizeMax
 };
 
 /* for ClassFactory */
diff --git a/dlls/dmstyle/dmstyle_private.h b/dlls/dmstyle/dmstyle_private.h
index 9beb693..86e7844 100644
--- a/dlls/dmstyle/dmstyle_private.h
+++ b/dlls/dmstyle/dmstyle_private.h
@@ -214,6 +214,7 @@
 
   /* IDirectMusicChordTrack fields */
   LPDMUS_OBJECTDESC pDesc;
+  DWORD dwScale;
 };
 
 /* IUnknown: */
diff --git a/include/dmusicf.h b/include/dmusicf.h
index deaba1b..476458e 100644
--- a/include/dmusicf.h
+++ b/include/dmusicf.h
@@ -829,7 +829,7 @@
 };
 
 struct _DMUS_IO_SEGMENT_ITEM_HEADER {
-	MUSIC_TIME llTimeLogical;
+	MUSIC_TIME lTimeLogical;
 	MUSIC_TIME lTimePhysical;
 	DWORD      dwPlayFlags;
 	DWORD      dwFlags;
