[SCM] libebml packaging branch, upstream, updated. upstream/0.8.0

edrz-guest at users.alioth.debian.org edrz-guest at users.alioth.debian.org
Wed May 26 23:03:44 UTC 2010


The following commit has been merged in the upstream branch:
commit 6231952843bf965913c6bc2599af315cb86c524b
Author: Eric Dantan Rzewnicki <eric at zhevny.com>
Date:   Wed May 26 18:41:47 2010 -0400

    Imported Upstream version 0.8.0

diff --git a/ChangeLog b/ChangeLog
index 72dd3dc..3e79350 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,1377 +1,1559 @@
-2006-03-30 19:33  mosu
-
-	* trunk/libebml/src/EbmlFloat.cpp: Avoid pointer aliasing issues.
-
-2006-03-30 19:05  mosu
-
-	* trunk/libebml/make/linux/Makefile: Small improvements like
-	  creating the directory first and avoid failing if the symlink
-	  exists already.
-
-2006-01-25 00:59  robux4
-
-	* trunk/libebml/ebml/EbmlConfig.h: add support for Borland C++
-	  Builder 2006 preview
-
-2005-10-18 17:59  mosu
-
-	* trunk/libebml/ChangeLog, trunk/libebml/debian/changelog: Changed
-	  the version in the Debian control file & automatic ChangeLog
-	  update.
-
-2005-10-15 16:00  robux4
-
-	* trunk/libebml/ebml/EbmlVersion.h: libebml: the next version will
-	  be 0.7.6
-
-2005-10-15 15:56  robux4
-
-	* trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/src/EbmlElement.cpp, trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libmatroska/src/KaxBlock.cpp: libebml/libmatroska: fix a
-	  major bug when "unknown size" was used (Haali does)
-
-2005-08-31 13:28  mosu
-
-	* trunk/libebml/make/linux/suse-libebml-makefile.diff,
-	  trunk/libebml/make/linux/suse.spec: Added the necessary patch for
-	  packaging libebml on SuSE.
-
-2005-08-31 13:19  mosu
-
-	* trunk/libebml/make/linux/fedora-core.spec,
-	  trunk/libebml/make/linux/suse.spec: Added the spec files that I
-	  use for building libebml on SuSE and Fedora Core.
-
-2005-08-26 08:18  mosu
-
-	* trunk/libebml/src/Debug.cpp: Make the compiler happy: tv.tv_usec's
-	  type does not have to be a long int.
-
-2005-05-22 07:26  mosu
-
-	* trunk/libebml/ChangeLog: Automatic ChangeLog update.
-
-2005-05-22 07:26  mosu
-
-	* trunk/libebml, trunk/libebml/debian: Ignore some files and
-	  directories created during the Debian build process.
-
-2005-05-22 07:24  mosu
-
-	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
-	  Bumped the version number to 0.7.5 in the places that robux4
-	  forgot.
-
-2005-05-19 19:16  robux4
-
-	* trunk/libebml/ebml/EbmlVersion.h,
-	  trunk/libmatroska/matroska/KaxVersion.h: update version numbers
-	  for the upcoming release
-
-2005-05-19 16:37  robux4
-
-	* trunk/libebml/src/EbmlElement.cpp: libebml: better check on the
-	  max reading size specified and levels
-
-2005-05-19 15:47  robux4
-
-	* trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/src/EbmlMaster.cpp: libebml: better evaluation of
-	  the data left to read
-
-2005-05-06 11:43  robux4
-
-	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlEndian.h, trunk/libebml/src/EbmlCrc32.cpp:
-	  libebml: handle the WORS_BIGENDIAN flag the same way as other UNIX
-	  libs (defined or not)
-
-2005-04-19 06:56  mosu
-
-	* trunk/libebml/make/linux/Makefile: Do not compile shared libs on
-	  Mac OS X due to how they should be handled there. If need arises
-	  we can always implement it properly. Patch by Shawn Holwegner
-	  <shawn () holwegner ! com>
-
-2005-04-16 11:18  mosu
-
-	* trunk/libebml/ChangeLog: Automatic ChangeLog update.
-
-2005-04-16 11:17  mosu
-
-	* trunk/libebml/debian/rules, trunk/libebml/make/linux/Makefile:
-	  Updated the Linux build system and added targets for installing
-	  only the static lib + headers. Updated the Debian package build
-	  script for that, too.
-
-2005-04-16 11:09  mosu
-
-	* trunk/libebml/debian/changelog: Updated the Debian packet's
-	  version number.
-
-2005-04-16 11:09  mosu
-
-	* trunk/libebml/ChangeLog: Automatic ChangeLog update.
-
-2005-04-14 15:19  mosu
-
-	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlCrc32.h:
-	  Fixes for compilation with gcc 4 on 64 bit platforms (AMD64).
-	  Patch by Stefan Seyfried <seife () gmane0305 ! slipkontur ! de>
-
-2005-03-28 09:55  mosu
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
-	  Removed the unnecessary non-const comparison operator.
-
-2005-03-27 13:55  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
-	  libebml: allow comparison of const elements too
-
-2005-03-19 10:33  mosu
-
-	* trunk/libebml/make/linux: Ignore the shared lib and its links.
-
-2005-03-19 10:31  mosu
-
-	* trunk/libebml/make/linux/Makefile: Say something about 'lib' not
-	  being a valid target anymore. 'clean' should remove the .lo, too.
-
-2005-03-19 10:24  mosu
-
-	* trunk/libebml/make/linux/Makefile: Provide separate make targets
-	  for the static and the shared library.
-
-2005-03-19 10:15  mosu
-
-	* trunk/libebml/src/EbmlFloat.cpp: Ups...
-
-2005-03-19 10:13  mosu
-
-	* trunk/libebml/src/EbmlFloat.cpp: Compilation fix for newer gcc
-	  versions.
-
-2005-03-17 10:13  robux4
-
-	* trunk/libebml/make/vc7/lib/libebml.v71.vcproj: WinIOCallback is
-	  built by default on Windows
-
-2005-03-17 09:36  robux4
-
-	* trunk/libebml/src/EbmlCrc32.cpp,
-	  trunk/libmatroska/src/KaxTrackEntryData.cpp: some strings to
-	  watermark the code
-
-2005-03-17 09:14  robux4
-
-	* trunk/libebml/src/EbmlHead.cpp,
-	  trunk/libmatroska/src/KaxSegment.cpp: some strings to watermark
-	  the code
-
-2005-03-16 18:32  robux4
-
-	* trunk/libebml/make/vc7/lib/libebml.vcproj: libebml: WinIOCallback
-	  is compiled by default on Win32
-
-2005-03-16 18:30  robux4
-
-	* trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libmatroska/matroska/KaxContexts.h,
-	  trunk/mkxuncat/mkxuncat.cpp, trunk/mkxuncat/mkxuncat.vcproj: misc
-	  compilation fixes
-
-2005-03-16 13:01  robux4
-
-	* trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.cpp: libebml: safer
-	  when seeking fails
-
-2005-03-16 12:48  robux4
-
-	* trunk/libebml/ebml/EbmlVersion.h: libebml: push the version number
-
-2005-03-16 12:47  robux4
-
-	* trunk/libebml/ebml/StdIOCallback.h,
-	  trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: libebml: cache
-	  the stream position for StdIOCallback and WinIOCallback (not
-	  tested)
-
-2005-03-16 12:28  robux4
-
-	* trunk/libebml/ebml/EbmlMaster.h: libebml: allow retrieving the
-	  starting point of the actual data in a Master element
-
-2005-03-13 10:49  robux4
-
-	* trunk/libebml/make/linux/Makefile,
-	  trunk/libmatroska/make/linux/Makefile: libebml/libmatroska: allow
-	  to build as shared libraries for Gentoo
-
-2005-03-04 20:11  robux4
-
-	* trunk/libebml/ebml/EbmlMaster.h: avoid a warning in MSVC7
-
-2005-03-03 13:18  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVoid.cpp: update the copyright dates
-
-2005-02-06 19:48  mosu
-
-	* trunk/libebml/ChangeLog: Automatic ChangeLog update (with a new
-	  program -- that's why the diff is so huge)
-
-2005-02-06 18:11  mosu
-
-	* trunk/libebml/make/linux/Makefile: Output an error if a mingw
-	  compiler is used with the Linux Makefile (I simply do that too
-	  often).
-
-2005-02-06 16:17  robux4
-
-	* trunk/libebml/src/EbmlBinary.cpp: libebml: remove wrong comment
-
-2005-02-05 21:34  robux4
-
-	* trunk/libebml/src/EbmlBinary.cpp: libebml: the previous commit had
-	  was b0rked
-
-2005-02-05 21:30  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
-	  libebml: allow binary element comparison (useful to compare UIDs)
-
-2005-01-10 22:49  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVoid.cpp: libebml: rename bSaveDefault in
-	  bKeepIntact
-
-2005-01-10 22:34  robux4
-
-	* trunk/libebml/ebml/EbmlElement.h: libebml: more comments on what
-	  size functions return and when they should be used
-
-2005-01-10 20:05  robux4
-
-	* trunk/libebml/ebml/EbmlMaster.h: libebml: don't save empty
-	  EbmlMasters by default
-
-2005-01-05 16:15  robux4
-
-	* trunk/libebml/ebml/c/libebml_t.h: patches from the VLC repository
-
-2004-11-30 15:41  mosu
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
-	  Use malloc() and free() instead of new[] and delete[] where the
-	  lib might deal with pointers that have been allocated by the app,
-	  or where the app has allocated the memory. Reason: new[]ed memory
-	  cannot be realloc()ed.
-
-2004-11-19 12:17  mosu
-
-	* trunk/libebml/make/mingw32/Makefile: Compile libebml as a DLL by
-	  default (is anyone except me using this mingw Makefile anyway?).
-	  Do not remove the dependency file on "make clean".
-
-2004-11-17 08:45  mosu
-
-	* trunk/libebml/make/linux/Makefile: Do not remove the .depend file
-	  on "make clean".
-
-2004-11-14 10:39  mosu
-
-	* trunk/libebml/ebml/EbmlVersion.h: Numbers starting with '0' are
-	  octal numbers. Therefore a version number '0.8.3' can definitely
-	  not be expressed as '000803'. A very stupid mistake...
-
-2004-11-13 21:11  mosu
-
-	* trunk/libebml/make/mingw32: Also ignore the static lib.
-
-2004-11-13 21:09  mosu
-
-	* trunk/libebml/make/linux/Makefile, trunk/libebml/make/mingw32,
-	  trunk/libebml/make/mingw32/Makefile: Fixed "make depend" on mingw
-	  and some cleanup for the Linux Makefile.
-
-2004-11-13 11:30  mosu
-
-	* trunk/libebml/make/linux: Ignore the .depend file created by "make
-	  depend".
-
-2004-11-13 11:27  mosu
-
-	* trunk/libebml/make/linux/Makefile: Cleanup
-
-2004-11-13 11:25  mosu
-
-	* trunk/libebml/make/linux/Makefile: Improved the dependency
-	  calculation to be more portable (makedepend doesn't exist
-	  everywhere, and it doesn't necessarily use the compiler we want).
-
-2004-11-13 11:17  mosu
-
-	* trunk/libebml/ebml/EbmlMaster.h: Added a "RemoveAll" function.
-
-2004-11-10 20:48  mosu
-
-	* trunk/libebml/ChangeLog: Automatic ChangeLog update
-
-2004-11-10 20:47  mosu
-
-	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
-	  Bumped the version number to 0.7.3.
-
-2004-11-10 20:46  mosu
-
-	* trunk/libebml/ebml/EbmlId.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h: Added some operator!= to
-	  avoid confusion and mistakes with comparison and automatic
-	  casting.
-
-2004-10-18 19:28  robux4
-
-	* trunk/DvdMenuXtractor/DvdMenuXtractor.cpp,
-	  trunk/DvdMenuXtractor/IFOFile.cpp,
-	  trunk/DvdMenuXtractor/IFOFile.h,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp: better code to handle all VTS
-	  VOBs (not yet there)
-
-2004-10-14 07:48  mosu
-
-	* trunk/libebml/src/EbmlUnicodeString.cpp: wchar.h doesn't exist on
-	  OpenBSD. Patch by Diego Pettenò <dgp85 (a) users ! sourceforge !
-	  net>.
-
-2004-09-26 10:03  mosu
-
-	* trunk/libebml/ChangeLog: Automatic ChangeLog update
-
-2004-09-26 10:03  mosu
-
-	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
-	  Bumped the version number to 0.7.2.
-
-2004-09-23 22:54  mosu
-
-	* trunk/libebml/ebml/c/libebml_t.h: Fix for the compilation on
-	  Solaris. I also redid the #if... hierarchy to be a bit less
-	  confusing.
-
-2004-08-28 14:18  robux4
-
-	* trunk/libebml/ebml/EbmlFloat.h: remove the unsupported float80
-	  support
-
-2004-08-28 14:05  robux4
-
-	* trunk/libebml/ebml/EbmlContexts.h,
-	  trunk/libebml/ebml/EbmlEndian.h, trunk/libebml/ebml/EbmlFloat.h,
-	  trunk/libebml/make/vc7/dll,
-	  trunk/libebml/make/vc7/dll/libebmldll.v71.vcproj: allow building a
-	  DLL with MSVC7 (not compatible with the MinGW one)
-
-2004-08-10 12:27  robux4
-
-	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlFloat.h,
-	  trunk/libebml/src/EbmlFloat.cpp: remove fake 80 bits float support
-
-2004-07-31 08:56  robux4
-
-	* trunk/libebml/src/MemIOCallback.cpp: Apparently it's better this
-	  way on some compilers
-
-2004-07-26 17:49  mosu
-
-	* trunk/libebml/make/mingw32/Makefile: Proper description for the
-	  SHARED option.
-
-2004-07-25 10:11  mosu
-
-	* trunk/libebml/ChangeLog, trunk/libebml/debian/changelog,
-	  trunk/libebml/ebml/EbmlVersion.h: Bumped the version number to
-	  0.7.1.
-
-2004-07-21 18:12  mosu
-
-	* trunk/libebml/src/EbmlUnicodeString.cpp: I still hate tabs.
-
-2004-07-21 18:09  mosu
-
-	* trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/src/EbmlUnicodeString.cpp: Do not use the same name
-	  as a standard C library function. Especially not if the return
-	  values are reversed!
-
-2004-07-19 16:39  mosu
-
-	* trunk/libebml/make/linux/Makefile: Let the user specify his own
-	  CXXFLAGS and CPPFLAGS.
-
-2004-07-09 21:18  mosu
-
-	* trunk/libebml/ChangeLog, trunk/libebml/debian/rules: debian/rules
-	  should be executable, ChangeLog should not.
-
-2004-07-09 21:11  mosu
-
-	* trunk/libebml/make/linux: Ignore the created library.
-
-2004-07-09 20:59  mosu
-
-	* trunk/libebml/ChangeLog, trunk/libebml/LICENSE.LGPL,
-	  trunk/libebml/debian/changelog, trunk/libebml/debian/control,
-	  trunk/libebml/debian/copyright, trunk/libebml/debian/dirs,
-	  trunk/libebml/debian/docs, trunk/libebml/debian/libebml-dev.dirs,
-	  trunk/libebml/debian/libebml-dev.files,
-	  trunk/libebml/debian/rules, trunk/libebml/ebml/Debug.h,
-	  trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlConfig.h,
-	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
-	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
-	  trunk/libebml/ebml/IOCallback.h,
-	  trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/ebml/StdIOCallback.h,
-	  trunk/libebml/ebml/c/libebml_t.h,
-	  trunk/libebml/make/linux/Makefile,
-	  trunk/libebml/make/mingw32/Makefile,
-	  trunk/libebml/make/mingw32/libebml.dev,
-	  trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlContexts.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlDummy.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlStream.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlSubHead.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libebml/src/IOCallback.cpp,
-	  trunk/libebml/src/MemIOCallback.cpp,
-	  trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: Set eol-style
-	  and keywords properties.
-
-2004-05-11 20:27  mosu
-
-	* trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/ebml/c/libebml_t.h,
-	  trunk/libebml/make/linux/Makefile: Compilation on BeOS. Patch by
-	  Vegard W&#65533;rp <devel at vegardw.com>
-
-2004-04-26 19:35  robux4
-
-	* trunk/libebml/make/vc7/Makefile,
-	  trunk/libmatroska/make/vc7/Makefile: Makefile to use the free
-	  VS.Net 2003 command-line compiler
-
-2004-04-24 09:09  mosu
-
-	* trunk/libebml/make/linux/Makefile,
-	  trunk/libmatroska/make/linux/Makefile: Set LD to CXX by default.
-
-2004-04-23 16:40  mosu
-
-	* trunk/libebml/ChangeLog: Updates
-
-2004-04-23 16:39  mosu
-
-	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
-	  Bumped version number to 0.7.0.
-
-2004-04-21 19:55  mosu
-
-	* trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog: Updates
-
-2004-04-14 23:17  robux4
-
-	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
-	  trunk/libebml/ebml/EbmlConfig.h,
-	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
-	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
-	  trunk/libebml/ebml/IOCallback.h,
-	  trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/ebml/StdIOCallback.h,
-	  trunk/libebml/ebml/c/libebml_t.h, trunk/libebml/src/Debug.cpp,
-	  trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlContexts.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlDummy.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlStream.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlSubHead.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libebml/src/IOCallback.cpp,
-	  trunk/libebml/src/MemIOCallback.cpp,
-	  trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: Switch to LGPL
-	  license
-
-2004-04-14 23:04  robux4
-
-	* trunk/libebml/LICENSE.GPL, trunk/libebml/LICENSE.LGPL,
-	  trunk/libebml/LICENSE.QPL, trunk/libmatroska/LICENSE.GPL,
-	  trunk/libmatroska/LICENSE.LGPL, trunk/libmatroska/LICENSE.QPL:
-	  Switch to LGPL license
-
-2004-03-09 20:33  mosu
-
-	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
-	  Updated the version number to 0.6.5.
-
-2004-03-09 20:27  mosu
-
-	* trunk/libebml/ChangeLog: Updates
-
-2004-03-09 20:05  mosu
-
-	* trunk/libebml/src/EbmlUnicodeString.cpp: Allow the cloning of
-	  empty strings.
-
-2004-03-06 07:45  jcsston
-
-	* trunk/libebml/src/EbmlElement.cpp: Fix for ebml coded sizes larger
-	  than 8 bytes, was overflowing the size buffer
-
-2004-02-18 07:19  jcsston
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: Added SetEOF()
-	  function, changed class private area to protected, added a
-	  static_cast to remove a warning
-
-2004-01-31 13:43  robux4
-
-	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlTypes.h,
-	  trunk/libebml/ebml/c/libebml_t.h,
-	  trunk/libmatroska/matroska/KaxConfig.h,
-	  trunk/libmatroska/matroska/c/libmatroska_t.h: Simplify and change
-	  the copyright holder (nothing left from Ingo)
-
-2004-01-24 16:57  mosu
-
-	* trunk/libebml/src/EbmlMaster.cpp: Allow elements to be added to
-	  the end of the master even with Insert.
-
-2004-01-19 10:33  mosu
-
-	* trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog: Updated the
-	  ChangeLog.
-
-2004-01-19 10:28  mosu
-
-	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
-	  Bumped the version number.
-
-2004-01-17 21:41  mosu
-
-	* trunk/libebml/ebml/EbmlConfig.h: Removed some old and unused
-	  definition for DLL stuff in order to avoid confusion.
-
-2004-01-17 16:32  robux4
-
-	* trunk/libebml/src/EbmlMaster.cpp: Possibly fixed a problem with
-	  context handling in cases when we end a level with an unknown
-	  element
-
-2004-01-15 15:02  mosu
-
-	* trunk/libebml/ChangeLog: Updated the ChangeLog.
-
-2004-01-10 15:31  robux4
-
-	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
-	  trunk/libebml/ebml/EbmlConfig.h,
-	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
-	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
-	  trunk/libebml/ebml/IOCallback.h,
-	  trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/ebml/StdIOCallback.h, trunk/libebml/src/Debug.cpp,
-	  trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlContexts.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlDummy.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlStream.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlSubHead.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libebml/src/IOCallback.cpp,
-	  trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libmatroska/matroska/FileKax.h,
-	  trunk/libmatroska/matroska/KaxAttached.h,
-	  trunk/libmatroska/matroska/KaxAttachments.h,
-	  trunk/libmatroska/matroska/KaxBlock.h,
-	  trunk/libmatroska/matroska/KaxBlockData.h,
-	  trunk/libmatroska/matroska/KaxChapters.h,
-	  trunk/libmatroska/matroska/KaxCluster.h,
-	  trunk/libmatroska/matroska/KaxClusterData.h,
-	  trunk/libmatroska/matroska/KaxConfig.h,
-	  trunk/libmatroska/matroska/KaxContentEncoding.h,
-	  trunk/libmatroska/matroska/KaxContexts.h,
-	  trunk/libmatroska/matroska/KaxCues.h,
-	  trunk/libmatroska/matroska/KaxCuesData.h,
-	  trunk/libmatroska/matroska/KaxInfo.h,
-	  trunk/libmatroska/matroska/KaxInfoData.h,
-	  trunk/libmatroska/matroska/KaxSeekHead.h,
-	  trunk/libmatroska/matroska/KaxSegment.h,
-	  trunk/libmatroska/matroska/KaxTag.h,
-	  trunk/libmatroska/matroska/KaxTagMulti.h,
-	  trunk/libmatroska/matroska/KaxTags.h,
-	  trunk/libmatroska/matroska/KaxTrackAudio.h,
-	  trunk/libmatroska/matroska/KaxTrackEntryData.h,
-	  trunk/libmatroska/matroska/KaxTrackVideo.h,
-	  trunk/libmatroska/matroska/KaxTracks.h,
-	  trunk/libmatroska/matroska/KaxVersion.h,
-	  trunk/libmatroska/src/KaxAttached.cpp,
-	  trunk/libmatroska/src/KaxAttachments.cpp,
-	  trunk/libmatroska/src/KaxBlock.cpp,
-	  trunk/libmatroska/src/KaxBlockData.cpp,
-	  trunk/libmatroska/src/KaxChapters.cpp,
-	  trunk/libmatroska/src/KaxCluster.cpp,
-	  trunk/libmatroska/src/KaxClusterData.cpp,
-	  trunk/libmatroska/src/KaxContentEncoding.cpp,
-	  trunk/libmatroska/src/KaxContexts.cpp,
-	  trunk/libmatroska/src/KaxCues.cpp,
-	  trunk/libmatroska/src/KaxCuesData.cpp,
-	  trunk/libmatroska/src/KaxInfo.cpp,
-	  trunk/libmatroska/src/KaxInfoData.cpp,
-	  trunk/libmatroska/src/KaxSeekHead.cpp,
-	  trunk/libmatroska/src/KaxSegment.cpp,
-	  trunk/libmatroska/src/KaxTag.cpp,
-	  trunk/libmatroska/src/KaxTagMulti.cpp,
-	  trunk/libmatroska/src/KaxTags.cpp,
-	  trunk/libmatroska/src/KaxTrackAudio.cpp,
-	  trunk/libmatroska/src/KaxTrackEntryData.cpp,
-	  trunk/libmatroska/src/KaxTrackVideo.cpp,
-	  trunk/libmatroska/src/KaxTracks.cpp,
-	  trunk/libmatroska/src/KaxVersion.cpp,
-	  trunk/libmatroska/test/mux/test8.cpp,
-	  trunk/libmatroska/test/tags/test9.cpp: Update the copyright years
-
-2004-01-10 15:23  robux4
-
-	* trunk/libebml/src/EbmlElement.cpp: Fix a problem on the position
-	  esitmation (thx to Cyrius)
-
-2004-01-10 14:19  mosu
-
-	* trunk/libebml/make/mingw32/Makefile,
-	  trunk/libmatroska/make/mingw32/Makefile: Updated the MinGW build
-	  system.
-
-2004-01-10 14:18  mosu
-
-	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
-	  trunk/libebml/ebml/EbmlConfig.h,
-	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
-	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/ebml/IOCallback.h,
-	  trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/ebml/StdIOCallback.h: Added definitions that allow
-	  building libebml as a DLL on Windows.
-
-2004-01-06 22:15  robux4
-
-	* trunk/libebml/make/vc6/lib/static/libebml.dsp,
-	  trunk/libmatroska/make/vc6/lib/static/libmatroska.dsp:
-	  StdInclude.h doesn't exist anymore
-
-2004-01-06 22:12  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlTypes.h, trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/ebml/IOCallback.h,
-	  trunk/libebml/src/Debug.cpp: Fixes for the FreeBSD include order
-	  pb
-
-2004-01-06 21:23  robux4
-
-	* trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlContexts.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlDummy.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlStream.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlSubHead.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libebml/src/IOCallback.cpp,
-	  trunk/libebml/src/MemIOCallback.cpp,
-	  trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libebml/src/StdInclude.h: No more StdInclude use, should fix
-	  a FreeBSD warning
-
-2004-01-05 21:09  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/src/MemIOCallback.cpp: Make default scope reading
-	  where it was missing
-
-2004-01-05 11:24  mosu
-
-	* trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/make/linux/Makefile, trunk/libebml/src/Debug.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/StdIOCallback.cpp: Fixed a number of warnings
-	  (shadowed and uinitialized variables).
-
-2004-01-01 13:28  mosu
-
-	* trunk/libebml/debian/rules, trunk/libmatroska/debian/rules: Also
-	  install the ChangeLog.
-
-2004-01-01 13:20  mosu
-
-	* trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog,
-	  trunk/libmatroska/ChangeLog.txt: Added a ChangeLog.
-
-2003-12-28 19:31  mosu
-
-	* trunk/libebml/ebml/MemIOCallback.h: Fix for some gcc versions
-	  which hickup on min being defined in their C++ stream headers.
-
-2003-12-28 01:04  jcsston
-
-	* trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/src/MemIOCallback.cpp: Some updates/fixes
-
-2003-12-25 12:28  mosu
-
-	* trunk/libebml/debian/changelog: Updated version information.
-
-2003-11-12 16:38  mosu
-
-	* trunk/libebml/ebml/EbmlVersion.h: Updated the version number due
-	  to the interface change in EbmlBinary.Read().
-
-2003-11-12 15:24  mosu
-
-	* trunk/libebml/ebml/EbmlEndian.h: Fixes for big endian/RISC
-	  processors that do not allow non-aligned reads/writes for word or
-	  bigger sized objects.
-
-2003-11-03 22:17  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/src/EbmlBinary.cpp, trunk/libebml/src/EbmlCrc32.cpp,
-	  trunk/libebml/src/EbmlDate.cpp, trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libmatroska/matroska/KaxBlock.h,
-	  trunk/libmatroska/src/KaxBlock.cpp,
-	  trunk/libmatroska/test/mux/test8.cpp: Better handling of scope
-	  reading
-
-2003-11-03 22:13  robux4
-
-	* trunk/libebml/ebml/EbmlTypes.h: Some Cleanup
-
-2003-10-31 12:29  mosu
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlMaster.h:
-	  Added forgotten default values for ReadData.
-
-2003-10-31 08:52  mosu
-
-	* trunk/libebml/ebml/EbmlHead.h, trunk/libebml/ebml/EbmlSubHead.h:
-	  Fixed the new line/carriage return mess.
-
-2003-10-31 08:34  mosu
-
-	* trunk/libebml/debian/changelog: New version number.
-
-2003-10-30 23:09  robux4
-
-	* trunk/libebml/ebml/EbmlVersion.h: new version for the addition
-
-2003-10-30 23:06  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/src/EbmlBinary.cpp, trunk/libebml/src/EbmlCrc32.cpp,
-	  trunk/libebml/src/EbmlDate.cpp, trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp: Allow some elements not
-	  to be fully read
-
-2003-10-28 22:05  mosu
-
-	* trunk/libebml/src/EbmlMaster.cpp: Fixes for compilation with gcc
-	  2.95.
-
-2003-10-28 21:46  mosu
-
-	* trunk/libebml/debian/changelog: Updated version number.
-
-2003-10-28 21:01  robux4
-
-	* trunk/libebml/ebml/EbmlVersion.h: Update the version number
-
-2003-10-28 20:55  robux4
-
-	* trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libmatroska/matroska/KaxBlock.h,
-	  trunk/libmatroska/src/KaxBlock.cpp: EBML-size handling is more
-	  general and handle the Unknown Size
-
-2003-10-25 15:09  mosu
-
-	* trunk/libebml/make/mingw32/Makefile,
-	  trunk/libmatroska/make/mingw32/Makefile: Support the same targest
-	  as the Linux Makefile.
-
-2003-10-24 22:03  mosu
-
-	* trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/src/EbmlElement.cpp: Changed the buffer size
-	  paramter from the much too small "char" to uint32.
-
-2003-10-22 14:18  pamel
-
-	* trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libmatroska/matroska/KaxTypes.h,
-	  trunk/libmatroska/src/KaxBlock.cpp: New lacing modes reading.
-
-2003-10-21 21:21  robux4
-
-	* trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/src/EbmlElement.cpp, trunk/libebml/src/EbmlVoid.cpp:
-	  New way to compute the EBML-coded length
-
-2003-10-16 21:13  mosu
-
-	* trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp: Fixed some warnings.
-	  Nothing major.
-
-2003-10-15 20:34  mosu
-
-	* trunk/libebml/make/linux/Makefile,
-	  trunk/libmatroska/make/linux/Makefile: Removed -pedantic due to
-	  problems on FreeBSD.
-
-2003-10-15 05:47  jcsston
-
-	* trunk/libebml/ebml/EbmlBinary.h,
-	  trunk/libebml/ebml/StdIOCallback.h: Define/includes for Borland
-	  C++ complier, from Zen
-
-2003-10-08 15:50  jcsston
-
-	* trunk/MatroskaUtils/MatroskaCDL.rc,
-	  trunk/MatroskaUtils/MatroskaPages.cpp,
-	  trunk/MatroskaUtils/MatroskaUtils.cpp,
-	  trunk/MatroskaUtils/MatroskaUtils.h,
-	  trunk/MatroskaUtils/ShellExtension/MatroskaProp.cpp,
-	  trunk/MatroskaUtils/ShellExtension/MatroskaProp.def,
-	  trunk/MatroskaUtils/ShellExtension/MatroskaProp.vcproj,
-	  trunk/MatroskaUtils/mdump.cpp, trunk/MatroskaUtils/mdump.h,
-	  trunk/MatroskaUtils/version.ver,
-	  trunk/libebml/src/platform/win32/WinIOCallback.cpp: Works under
-	  Win9x
-
-2003-10-08 07:46  mosu
-
-	* trunk/libebml/ebml/EbmlConfig.h: Added AMD64 to the list of Little
-	  Endian processors.
-
-2003-09-29 20:56  robux4
-
-	* trunk/libebml/ebml/EbmlMaster.h, trunk/libebml/src/EbmlMaster.cpp:
-	  Added InsertElement()
-
-2003-09-28 20:15  jcsston
-
-	* trunk/libebml/ebml/EbmlMaster.h, trunk/libebml/src/EbmlMaster.cpp:
-	  Added FindAllMissingElements() method
-
-2003-09-28 20:11  jcsston
-
-	* trunk/libebml/ebml/MemIOCallback.h: Added SetDataBufferSize()
-	  method
-
-2003-09-17 20:28  mosu
-
-	* trunk/libebml/debian/changelog: Updated version information.
-
-2003-09-15 02:31  jcsston
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: Added Cyrius to
-	  the authors list
-
-2003-09-15 02:24  jcsston
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: Updated to have
-	  even better error reporting, also takes Unicode and ANSI filenames
-	  regardless of compile defines
-
-2003-09-14 08:22  robux4
-
-	* trunk/libebml/ebml/EbmlVersion.h: New version to reflect changes
-	  in constructors
-
-2003-09-13 20:41  robux4
-
-	* trunk/libebml/ebml/EbmlConfig.h: Added a new define for assertion
-
-2003-09-13 17:48  robux4
-
-	* trunk/libebml/ebml/EbmlHead.h, trunk/libebml/ebml/EbmlSubHead.h,
-	  trunk/libmatroska/matroska/KaxAttached.h,
-	  trunk/libmatroska/matroska/KaxAttachments.h,
-	  trunk/libmatroska/matroska/KaxBlock.h,
-	  trunk/libmatroska/matroska/KaxBlockData.h,
-	  trunk/libmatroska/matroska/KaxChapters.h,
-	  trunk/libmatroska/matroska/KaxCluster.h,
-	  trunk/libmatroska/matroska/KaxClusterData.h,
-	  trunk/libmatroska/matroska/KaxCues.h,
-	  trunk/libmatroska/matroska/KaxCuesData.h,
-	  trunk/libmatroska/matroska/KaxInfo.h,
-	  trunk/libmatroska/matroska/KaxInfoData.h,
-	  trunk/libmatroska/matroska/KaxSeekHead.h,
-	  trunk/libmatroska/matroska/KaxSegment.h,
-	  trunk/libmatroska/matroska/KaxTag.h,
-	  trunk/libmatroska/matroska/KaxTagMulti.h,
-	  trunk/libmatroska/matroska/KaxTags.h,
-	  trunk/libmatroska/matroska/KaxTrackAudio.h,
-	  trunk/libmatroska/matroska/KaxTrackEntryData.h,
-	  trunk/libmatroska/matroska/KaxTrackVideo.h,
-	  trunk/libmatroska/matroska/KaxTracks.h,
-	  trunk/libmatroska/test/mux/test6.cpp: Added a Clone() method and a
-	  IsMaster() method
-
-2003-09-13 17:24  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlConfig.h,
-	  trunk/libebml/ebml/EbmlCrc32.h, trunk/libebml/ebml/EbmlDate.h,
-	  trunk/libebml/ebml/EbmlDummy.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlString.h, trunk/libebml/ebml/EbmlSubHead.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
-	  trunk/libebml/src/EbmlBinary.cpp, trunk/libebml/src/EbmlCrc32.cpp,
-	  trunk/libebml/src/EbmlDate.cpp, trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp: Added a Clone() method
-	  and a IsMaster() method
-
-2003-09-03 21:36  cyrius
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: Win32 file flags
-	  parameter
-
-2003-09-03 20:38  robux4
-
-	* trunk/libebml/src/EbmlVoid.cpp: Fix a bug in ReplaceWith,
-	  hopefully it will not break anything else
-
-2003-09-01 21:58  robux4
-
-	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
-	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDummy.h, trunk/libebml/ebml/EbmlEndian.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlSubHead.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
-	  trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlContexts.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDummy.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlStream.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlSubHead.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp:
-	  libebml is not libmatroska
-
-2003-09-01 12:42  mosu
-
-	* trunk/libebml/LICENSE.GPL: Changed libmatroska to libebml.
-
-2003-09-01 11:36  mosu
-
-	* trunk/libebml/debian/changelog: New version number.
-
-2003-08-30 08:19  mosu
-
-	* trunk/libebml/ebml/EbmlVersion.h: Bumped version number to mark
-	  robux' changes in Read().
-
-2003-08-29 19:48  robux4
-
-	* trunk/libebml/src/EbmlElement.cpp: Changed the order of element
-	  checking
-
-2003-08-21 20:41  jcsston
-
-	* trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/src/EbmlUnicodeString.cpp: Removed my changes to
-	  UTFstring
-
-2003-08-04 07:36  robux4
-
-	* trunk/libebml/ebml/EbmlVersion.h,
-	  trunk/libmatroska/matroska/KaxVersion.h: Remove some old TODO
-
-2003-08-02 21:38  robux4
-
-	* trunk/libebml/src/EbmlUnicodeString.cpp: Fix a problem with some
-	  UCS-2 chars
-
-2003-08-01 22:25  robux4
-
-	* trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/src/MemIOCallback.cpp: Additions for easier Checksum
-	  manipulation
-
-2003-08-01 12:03  robux4
-
-	* trunk/libebml/make/vc7/lib/libebml.v71.vcproj,
-	  trunk/libmatroska/make/vc7/lib/static/libmatroska.v71.vcproj,
-	  trunk/mkxds/mkxds.v71.sln, trunk/mkxds/mkxds.v71.vcproj: Added
-	  VC7.1 (VS.Net 2003) projects
-
-2003-08-01 03:49  jcsston
-
-	* trunk/libebml/src/EbmlUnicodeString.cpp: *** empty log message ***
-
-2003-08-01 03:41  jcsston
-
-	* trunk/libebml/ebml/EbmlUnicodeString.h: *** empty log message ***
-
-2003-07-31 19:42  robux4
-
-	* trunk/libebml/ebml/EbmlCrc32.h, trunk/libebml/ebml/EbmlDate.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlUInteger.h, trunk/libebml/ebml/EbmlVoid.h,
-	  trunk/libebml/src/EbmlCrc32.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libmatroska/src/KaxBlock.cpp: Some fixes for better casting
-	  / type checking
-
-2003-07-31 07:53  jcsston
-
-	* trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/src/EbmlUnicodeString.cpp: Added some string
-	  functions and overloaded operators
-
-2003-07-30 09:31  robux4
-
-	* trunk/libebml/src/EbmlElement.cpp: Less processing in non Debug
-	  mode
-
-2003-07-29 21:43  robux4
-
-	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libmatroska/matroska/KaxBlock.h,
-	  trunk/libmatroska/matroska/KaxTrackVideo.h,
-	  trunk/libmatroska/src/KaxBlock.cpp,
-	  trunk/libmatroska/src/KaxTrackVideo.cpp: Checksum now doesn't care
-	  about mandatory data
-
-2003-07-28 22:54  robux4
-
-	* trunk/libebml/src/EbmlMaster.cpp: Fix a memory leak
-
-2003-07-28 22:42  robux4
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: Fix for some
-	  compilers
-
-2003-07-28 08:49  mosu
-
-	* trunk/libebml/debian/changelog,
-	  trunk/libmatroska/debian/changelog,
-	  trunk/libmatroska/debian/control: Updated version information.
-
-2003-07-27 20:28  mosu
-
-	* trunk/libebml/make/mingw32/Makefile,
-	  trunk/libmatroska/make/mingw32/Makefile: Necessary fixes for
-	  compilation with mingw.
-
-2003-07-26 15:18  mosu
-
-	* trunk/libebml/make/mingw32/Makefile: Needed updates for
-	  compilation with mingw.
-
-2003-07-25 20:06  robux4
-
-	* trunk/libebml/src/EbmlMaster.cpp: Fix a bug of Read() when the
-	  size is zero
-
-2003-07-23 18:23  jcsston
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: Added better
-	  detection if the file was really opened or not
-
-2003-07-23 17:17  jcsston
-
-	* trunk/libebml/ebml/c/libebml_t.h: Added Mosu's name to the author
-	  list
-
-2003-07-22 21:40  jcsston
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: Added
-	  MODE_SAFE for opening
-
-2003-07-21 20:39  cyrius
-
-	* trunk/libebml/src/EbmlVoid.cpp: Element size fixed
-
-2003-07-21 20:23  cyrius
-
-	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: 4GB limit
-	  fixed
-
-2003-07-21 02:42  jcsston
-
-	* trunk/libebml/ebml/c/libebml_t.h: Mosu's fixes to compile with
-	  Win32 GCC
-
-2003-07-17 09:48  mosu
-
-	* trunk/libebml/make/linux/Makefile,
-	  trunk/libmatroska/make/linux/Makefile: Proper Makefile that also
-	  installs the header files.
-
-2003-07-17 09:45  mosu
-
-	* trunk/libebml/make/linux/Makefile: Changes for the new directory
-	  structure for the "install" target.
-
-2003-07-16 22:09  jcsston
-
-	* trunk/libebml/make/vc7/lib/libebml.vcproj: Corrected Additional
-	  Include Directories
-
-2003-07-16 22:07  jcsston
-
-	* trunk/libebml/src/MemIOCallback.cpp: Fixed the Read() function to
-	  support seeking
-
-2003-07-16 16:21  mosu
-
-	* trunk/libebml/make/linux/Makefile,
-	  trunk/libmatroska/make/linux/Makefile: Removed old stuff.
-
-2003-07-16 15:13  robux4
-
-	* trunk/libebml/ebml/c, trunk/libebml/ebml/c/libebml_t.h,
-	  trunk/libebml/make/mingw32, trunk/libebml/make/mingw32/Makefile,
-	  trunk/libebml/make/mingw32/libebml.dev, trunk/libebml/make/vc6,
-	  trunk/libebml/make/vc6/lib, trunk/libebml/make/vc6/lib/static,
-	  trunk/libebml/make/vc6/lib/static/libebml.dsp,
-	  trunk/libebml/make/vc6/libebml.dsw, trunk/libebml/make/vc7,
-	  trunk/libebml/make/vc7/lib,
-	  trunk/libebml/make/vc7/lib/libebml.vcproj: Initial CVS version
-	  after the crash
-
-2003-07-16 15:02  robux4
-
-	* trunk/libebml/make, trunk/libebml/make/linux,
-	  trunk/libebml/make/linux/Makefile: Initial CVS version after the
-	  crash
-
-2003-07-16 14:46  robux4
-
-	* trunk/libebml, trunk/libebml/LICENSE.GPL,
-	  trunk/libebml/LICENSE.QPL, trunk/libebml/debian,
-	  trunk/libebml/debian/changelog, trunk/libebml/debian/control,
-	  trunk/libebml/debian/copyright, trunk/libebml/debian/dirs,
-	  trunk/libebml/debian/docs, trunk/libebml/debian/libebml-dev.dirs,
-	  trunk/libebml/debian/libebml-dev.files,
-	  trunk/libebml/debian/rules, trunk/libebml/ebml,
-	  trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
-	  trunk/libebml/ebml/EbmlConfig.h,
-	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
-	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
-	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
-	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
-	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
-	  trunk/libebml/ebml/EbmlSInteger.h,
-	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
-	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
-	  trunk/libebml/ebml/EbmlUInteger.h,
-	  trunk/libebml/ebml/EbmlUnicodeString.h,
-	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
-	  trunk/libebml/ebml/IOCallback.h,
-	  trunk/libebml/ebml/MemIOCallback.h,
-	  trunk/libebml/ebml/StdIOCallback.h, trunk/libebml/src,
-	  trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
-	  trunk/libebml/src/EbmlContexts.cpp,
-	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
-	  trunk/libebml/src/EbmlDummy.cpp,
-	  trunk/libebml/src/EbmlElement.cpp,
-	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
-	  trunk/libebml/src/EbmlMaster.cpp,
-	  trunk/libebml/src/EbmlSInteger.cpp,
-	  trunk/libebml/src/EbmlStream.cpp,
-	  trunk/libebml/src/EbmlString.cpp,
-	  trunk/libebml/src/EbmlSubHead.cpp,
-	  trunk/libebml/src/EbmlUInteger.cpp,
-	  trunk/libebml/src/EbmlUnicodeString.cpp,
-	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
-	  trunk/libebml/src/IOCallback.cpp,
-	  trunk/libebml/src/MemIOCallback.cpp,
-	  trunk/libebml/src/StdIOCallback.cpp,
-	  trunk/libebml/src/StdInclude.h, trunk/libebml/src/platform,
-	  trunk/libebml/src/platform/win32,
-	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
-	  trunk/libebml/src/platform/win32/WinIOCallback.h: Initial CVS
-	  version after the crash
-
+2010-04-30 robux4/mosu
+New 0.8.0 version:
+    - new macros to simplify and unify the way to declare and define EBML elements
+    - new macros to access variables of a Class/Object so that switching to libebml v2 is transparent
+    - add an EBML_STRICT_API compilation flag (off by default) to avoid direct access to internal class variables
+    - fix some building issues on Linux and MinGW
+    - add accessor calls to the base classes to avoid direct access to internal class variables
+    - add iterators to navigate throught the EbmlMaster children
+    - use a new filepos_t type for everything that relates to an element position/data size with INVALID_FILEPOS_T in case of errors
+    - remove the const on integer values
+
+
+2008-02-21 22:14  mosu
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlEndian.h,
+	  trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/ebml/c/libebml_t.h,
+	  trunk/libebml/src/StdIOCallback.cpp: Fixes for the compilation
+	  with gcc 4.3
+
+2007-02-17 10:55  robux4
+
+	* trunk/ARCorrect/ARCorrect.h, trunk/ARCorrect/ARCorrectFilter.h,
+	  trunk/ARCorrect/ARCorrectPage.h, trunk/ARCorrect/ARCorrect_GUID.h,
+	  trunk/ARCorrect/DShowUtils.h, trunk/ARCorrect/ITrackInfo.h,
+	  trunk/ARCorrect/PersistPropertyBag.h, trunk/ARCorrect/resource.h,
+	  trunk/DvdMenuXtractor/DvdMenuXtractor.proj,
+	  trunk/DvdMenuXtractor/chaptermanager.h,
+	  trunk/DvdMenuXtractor/config.h, trunk/DvdMenuXtractor/dmx.h,
+	  trunk/DvdMenuXtractor/dmxconsole.h,
+	  trunk/DvdMenuXtractor/dmxlogwidget.h,
+	  trunk/DvdMenuXtractor/dmxselectionitem.h,
+	  trunk/DvdMenuXtractor/dmxselectiontree.h,
+	  trunk/DvdMenuXtractor/dmxwizard.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/bswap.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/cmd_print.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/dvd_input.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/dvd_reader.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/dvd_udf.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/dvdread.proj,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/dvdread_internal.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/ifo_print.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/ifo_read.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/ifo_types.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/md5.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/nav_print.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/nav_read.h,
+	  trunk/DvdMenuXtractor/libdvdread/dvdread/nav_types.h,
+	  trunk/DvdMenuXtractor/libdvdread/libdvdread.proj,
+	  trunk/DvdMenuXtractor/libdvdread/src/src.proj,
+	  trunk/DvdMenuXtractor/libdvdread/win32/config.h,
+	  trunk/DvdMenuXtractor/libdvdread/win32/dirent.h,
+	  trunk/DvdMenuXtractor/libdvdread/win32/gtchar.h,
+	  trunk/DvdMenuXtractor/libdvdread/win32/inttypes.h,
+	  trunk/DvdMenuXtractor/libdvdread/win32/posix.h,
+	  trunk/DvdMenuXtractor/libdvdread/win32/stdint.h,
+	  trunk/DvdMenuXtractor/libdvdread/win32/win32.proj,
+	  trunk/DvdMenuXtractor/logtextedit.h,
+	  trunk/DvdMenuXtractor/mpegparser/CircBuffer.h,
+	  trunk/DvdMenuXtractor/mpegparser/M2VParser.h,
+	  trunk/DvdMenuXtractor/mpegparser/MPEGVideoBuffer.h,
+	  trunk/DvdMenuXtractor/mpegparser/Types.h,
+	  trunk/DvdMenuXtractor/mpegparser/mpegparser.proj,
+	  trunk/DvdMenuXtractor/outputreader.h,
+	  trunk/DvdMenuXtractor/selectiontreeitem.h,
+	  trunk/DvdMenuXtractor/selectiontreesubitem.h,
+	  trunk/DvdMenuXtractor/utilities.h,
+	  trunk/DvdMenuXtractor/vobparser/IFOContent.h,
+	  trunk/DvdMenuXtractor/vobparser/IFOFile.h,
+	  trunk/DvdMenuXtractor/vobparser/VobParser.h,
+	  trunk/DvdMenuXtractor/vobparser/iso/iso_lang.h,
+	  trunk/DvdMenuXtractor/vobparser/vobparser.proj,
+	  trunk/LemAPI/ac3_input/ac3file.h,
+	  trunk/LemAPI/ac3_input/ac3frame.h,
+	  trunk/LemAPI/ac3_input/ac3iframe.h,
+	  trunk/LemAPI/ac3_input/c_types.h, trunk/LemAPI/avi_input/avilib.h,
+	  trunk/LemAPI/matroska_writer/matroska_writer.h,
+	  trunk/LemAPI/matroska_writer/matroska_writer_gui.h,
+	  trunk/LemAPI/mpa_input/c_types.h,
+	  trunk/LemAPI/mpa_input/mpafile.h,
+	  trunk/LemAPI/mpa_input/mpaframe.h,
+	  trunk/LemAPI/mpa_input/mpiframe.h, trunk/LemAPI/tinyXML/tinystr.h,
+	  trunk/LemAPI/tinyXML/tinyxml.h, trunk/LemAPI/wav_input/Config.h,
+	  trunk/LemAPI/wav_input/Endian.h, trunk/LemAPI/wav_input/FourCC.h,
+	  trunk/LemAPI/wav_input/Types.h, trunk/LemAPI/wav_input/c_types.h,
+	  trunk/LemAPI/wav_input/chunk.h, trunk/LemAPI/wav_input/fact.h,
+	  trunk/LemAPI/wav_input/fio.h, trunk/LemAPI/wav_input/format.h,
+	  trunk/LemAPI/wav_input/riff.h, trunk/LemAPI/wav_input/wav.h,
+	  trunk/LemAPI/wav_input/wav2mka.h,
+	  trunk/MatroskaUtils/AviTagReader.h,
+	  trunk/MatroskaUtils/CFireRoutine.h, trunk/MatroskaUtils/DbgOut.h,
+	  trunk/MatroskaUtils/GDC/GDCMatroska/GDCMatroska_h.h,
+	  trunk/MatroskaUtils/GDC/GDCMatroska/IndexMatroska.h,
+	  trunk/MatroskaUtils/GDC/GDCMatroska/MatroskaParser.h,
+	  trunk/MatroskaUtils/GDC/GDCMatroska/Win32Stream.h,
+	  trunk/MatroskaUtils/GDC/GDCMatroska/resource.h,
+	  trunk/MatroskaUtils/GDC/GDCMatroska/stdafx.h,
+	  trunk/MatroskaUtils/GDC/common/GoogleDesktopComponentRegistration.h,
+	  trunk/MatroskaUtils/GDC/common/GoogleDesktopSearchAPI.h,
+	  trunk/MatroskaUtils/GDC/common/stdafx.h,
+	  trunk/MatroskaUtils/JCThread.h, trunk/MatroskaUtils/JList.h,
+	  trunk/MatroskaUtils/JString.h, trunk/MatroskaUtils/MP3TagReader.h,
+	  trunk/MatroskaUtils/MatroskaCDL/CDLApi.h,
+	  trunk/MatroskaUtils/MatroskaCDL/MatroskaCDL.h,
+	  trunk/MatroskaUtils/MatroskaChapterData.h,
+	  trunk/MatroskaUtils/MatroskaPages.h,
+	  trunk/MatroskaUtils/MatroskaReg.h,
+	  trunk/MatroskaUtils/MatroskaTagData.h,
+	  trunk/MatroskaUtils/MatroskaTrackData.h,
+	  trunk/MatroskaUtils/MatroskaUtils.h,
+	  trunk/MatroskaUtils/MatroskaUtilsBitrate.h,
+	  trunk/MatroskaUtils/MatroskaUtilsDebug.h,
+	  trunk/MatroskaUtils/MatroskaUtilsReader.h,
+	  trunk/MatroskaUtils/ShellExtension/CheckUsage/CheckUsage.h,
+	  trunk/MatroskaUtils/ShellExtension/CheckUsage/resource.h,
+	  trunk/MatroskaUtils/ShellExtension/DShowTools/DShowTools.h,
+	  trunk/MatroskaUtils/ShellExtension/DShowTools/convert.h,
+	  trunk/MatroskaUtils/ShellExtension/Http.h,
+	  trunk/MatroskaUtils/ShellExtension/MatroskaInfoParserCache.h,
+	  trunk/MatroskaUtils/ShellExtension/MatroskaProp.h,
+	  trunk/MatroskaUtils/ShellExtension/MatroskaPropShellExtension.h,
+	  trunk/MatroskaUtils/TagReader.h, trunk/MatroskaUtils/ZipArchive.h,
+	  trunk/MatroskaUtils/mdump.h, trunk/MatroskaUtils/resource.h,
+	  trunk/MatroskaUtils/tinyxml/tinystr.h, trunk/config.h,
+	  trunk/foo_input_matroska/DbgOut.h,
+	  trunk/foo_input_matroska/Foobar2000ReaderIOCallback.h,
+	  trunk/foo_input_matroska/container_matroska.h,
+	  trunk/foo_input_matroska/container_matroska_impl.h,
+	  trunk/foo_input_matroska/filesystem_matroska.h,
+	  trunk/foo_input_matroska/matroska_parser.h,
+	  trunk/foo_input_matroska/resource.h, trunk/libebml/libebml.proj,
+	  trunk/libmatroska/libmatroska.proj,
+	  trunk/libmatroska/matroska/KaxTag.h,
+	  trunk/libmatroska/test/ebml/ebml.proj,
+	  trunk/libmatroska/test/mux/mux.proj,
+	  trunk/libmatroska/test/tags/tags.proj,
+	  trunk/libmatroska/test/test.proj,
+	  trunk/libmatroska/test/utf8/utf8.proj,
+	  trunk/mkaencoder/src/mkaenc.h,
+	  trunk/mkvwriter/IOCallbackWrapper.h,
+	  trunk/mkvwriter/MatroskaMuxer.h,
+	  trunk/mkvwriter/MatroskaSimpleTags.h, trunk/mkvwriter/mkvwriter.h,
+	  trunk/mkvwriter/pub/hxtmkvwriter.h, trunk/mkxds/CoreVorbisGUID.h,
+	  trunk/mkxds/MatroskaReader.h, trunk/mkxds/OggDS.h,
+	  trunk/mkxds/Subtitles.h, trunk/mkxds/asyncio.h,
+	  trunk/mkxds/codecs.h, trunk/mkxds/global.h,
+	  trunk/mkxds/mkxPrioFrame.h, trunk/mkxds/mkx_opin.h,
+	  trunk/mkxds/mkxds.h, trunk/mkxds/mkxdsProperty.h,
+	  trunk/mkxds/mkxread.h, trunk/mkxds/resource.h,
+	  trunk/mkxuncat/mkxuncat.proj, trunk/root.proj: fix EOL style
+
+2007-01-22 11:21  robux4
+
+	* trunk/libebml/libebml.proj: don't use the debug(trace) class by
+	  default
+
+2007-01-19 10:15  robux4
+
+	* trunk/libebml/src/Debug.cpp: build even in a Unicode environment
+
+2007-01-19 09:58  robux4
+
+	* trunk/libebml/libebml.proj, trunk/libmatroska/libmatroska.proj,
+	  trunk/libmatroska/test/ebml/ebml.proj,
+	  trunk/libmatroska/test/mux/mux.proj,
+	  trunk/libmatroska/test/tags/tags.proj,
+	  trunk/libmatroska/test/test.proj,
+	  trunk/libmatroska/test/utf8/utf8.proj: add support for coremake
+	  building for the moment the config.h and coremake are referenced
+	  by a parent project
+
+2006-06-02 14:32  mosu
+
+	* trunk/libebml/make/linux/Makefile: Overwrite existing symlinks
+	  during install.
+
+2006-03-31 12:33  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libebml/debian/changelog,
+	  trunk/libebml/ebml/EbmlVersion.h: Bumped version to 0.7.7.
+	  Automatic ChangeLog update.
+
+2006-03-30 19:33  mosu
+
+	* trunk/libebml/src/EbmlFloat.cpp: Avoid pointer aliasing issues.
+
+2006-03-30 19:05  mosu
+
+	* trunk/libebml/make/linux/Makefile: Small improvements like
+	  creating the directory first and avoid failing if the symlink
+	  exists already.
+
+2006-01-25 00:59  robux4
+
+	* trunk/libebml/ebml/EbmlConfig.h: add support for Borland C++
+	  Builder 2006 preview
+
+2005-10-18 17:59  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libebml/debian/changelog: Changed
+	  the version in the Debian control file & automatic ChangeLog
+	  update.
+
+2005-10-15 16:00  robux4
+
+	* trunk/libebml/ebml/EbmlVersion.h: libebml: the next version will
+	  be 0.7.6
+
+2005-10-15 15:56  robux4
+
+	* trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/src/EbmlElement.cpp, trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libmatroska/src/KaxBlock.cpp: libebml/libmatroska: fix a
+	  major bug when "unknown size" was used (Haali does)
+
+2005-08-31 13:28  mosu
+
+	* trunk/libebml/make/linux/suse-libebml-makefile.diff,
+	  trunk/libebml/make/linux/suse.spec: Added the necessary patch for
+	  packaging libebml on SuSE.
+
+2005-08-31 13:19  mosu
+
+	* trunk/libebml/make/linux/fedora-core.spec,
+	  trunk/libebml/make/linux/suse.spec: Added the spec files that I
+	  use for building libebml on SuSE and Fedora Core.
+
+2005-08-26 08:18  mosu
+
+	* trunk/libebml/src/Debug.cpp: Make the compiler happy: tv.tv_usec's
+	  type does not have to be a long int.
+
+2005-05-22 07:26  mosu
+
+	* trunk/libebml/ChangeLog: Automatic ChangeLog update.
+
+2005-05-22 07:26  mosu
+
+	* trunk/libebml, trunk/libebml/debian: Ignore some files and
+	  directories created during the Debian build process.
+
+2005-05-22 07:24  mosu
+
+	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
+	  Bumped the version number to 0.7.5 in the places that robux4
+	  forgot.
+
+2005-05-19 19:16  robux4
+
+	* trunk/libebml/ebml/EbmlVersion.h,
+	  trunk/libmatroska/matroska/KaxVersion.h: update version numbers
+	  for the upcoming release
+
+2005-05-19 16:37  robux4
+
+	* trunk/libebml/src/EbmlElement.cpp: libebml: better check on the
+	  max reading size specified and levels
+
+2005-05-19 15:47  robux4
+
+	* trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/src/EbmlMaster.cpp: libebml: better evaluation of
+	  the data left to read
+
+2005-05-06 11:43  robux4
+
+	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlEndian.h, trunk/libebml/src/EbmlCrc32.cpp:
+	  libebml: handle the WORS_BIGENDIAN flag the same way as other UNIX
+	  libs (defined or not)
+
+2005-04-19 06:56  mosu
+
+	* trunk/libebml/make/linux/Makefile: Do not compile shared libs on
+	  Mac OS X due to how they should be handled there. If need arises
+	  we can always implement it properly. Patch by Shawn Holwegner
+	  <shawn () holwegner ! com>
+
+2005-04-16 11:18  mosu
+
+	* trunk/libebml/ChangeLog: Automatic ChangeLog update.
+
+2005-04-16 11:17  mosu
+
+	* trunk/libebml/debian/rules, trunk/libebml/make/linux/Makefile:
+	  Updated the Linux build system and added targets for installing
+	  only the static lib + headers. Updated the Debian package build
+	  script for that, too.
+
+2005-04-16 11:09  mosu
+
+	* trunk/libebml/debian/changelog: Updated the Debian packet's
+	  version number.
+
+2005-04-16 11:09  mosu
+
+	* trunk/libebml/ChangeLog: Automatic ChangeLog update.
+
+2005-04-14 15:19  mosu
+
+	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlCrc32.h:
+	  Fixes for compilation with gcc 4 on 64 bit platforms (AMD64).
+	  Patch by Stefan Seyfried <seife () gmane0305 ! slipkontur ! de>
+
+2005-03-28 09:55  mosu
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
+	  Removed the unnecessary non-const comparison operator.
+
+2005-03-27 13:55  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
+	  libebml: allow comparison of const elements too
+
+2005-03-19 10:33  mosu
+
+	* trunk/libebml/make/linux: Ignore the shared lib and its links.
+
+2005-03-19 10:31  mosu
+
+	* trunk/libebml/make/linux/Makefile: Say something about 'lib' not
+	  being a valid target anymore. 'clean' should remove the .lo, too.
+
+2005-03-19 10:24  mosu
+
+	* trunk/libebml/make/linux/Makefile: Provide separate make targets
+	  for the static and the shared library.
+
+2005-03-19 10:15  mosu
+
+	* trunk/libebml/src/EbmlFloat.cpp: Ups...
+
+2005-03-19 10:13  mosu
+
+	* trunk/libebml/src/EbmlFloat.cpp: Compilation fix for newer gcc
+	  versions.
+
+2005-03-17 10:13  robux4
+
+	* trunk/libebml/make/vc7/lib/libebml.v71.vcproj: WinIOCallback is
+	  built by default on Windows
+
+2005-03-17 09:36  robux4
+
+	* trunk/libebml/src/EbmlCrc32.cpp,
+	  trunk/libmatroska/src/KaxTrackEntryData.cpp: some strings to
+	  watermark the code
+
+2005-03-17 09:14  robux4
+
+	* trunk/libebml/src/EbmlHead.cpp,
+	  trunk/libmatroska/src/KaxSegment.cpp: some strings to watermark
+	  the code
+
+2005-03-16 18:32  robux4
+
+	* trunk/libebml/make/vc7/lib/libebml.vcproj: libebml: WinIOCallback
+	  is compiled by default on Win32
+
+2005-03-16 18:30  robux4
+
+	* trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libmatroska/matroska/KaxContexts.h,
+	  trunk/mkxuncat/mkxuncat.cpp, trunk/mkxuncat/mkxuncat.vcproj: misc
+	  compilation fixes
+
+2005-03-16 13:01  robux4
+
+	* trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.cpp: libebml: safer
+	  when seeking fails
+
+2005-03-16 12:48  robux4
+
+	* trunk/libebml/ebml/EbmlVersion.h: libebml: push the version number
+
+2005-03-16 12:47  robux4
+
+	* trunk/libebml/ebml/StdIOCallback.h,
+	  trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: libebml: cache
+	  the stream position for StdIOCallback and WinIOCallback (not
+	  tested)
+
+2005-03-16 12:28  robux4
+
+	* trunk/libebml/ebml/EbmlMaster.h: libebml: allow retrieving the
+	  starting point of the actual data in a Master element
+
+2005-03-13 10:49  robux4
+
+	* trunk/libebml/make/linux/Makefile,
+	  trunk/libmatroska/make/linux/Makefile: libebml/libmatroska: allow
+	  to build as shared libraries for Gentoo
+
+2005-03-04 20:11  robux4
+
+	* trunk/libebml/ebml/EbmlMaster.h: avoid a warning in MSVC7
+
+2005-03-03 13:18  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVoid.cpp: update the copyright dates
+
+2005-02-06 19:48  mosu
+
+	* trunk/libebml/ChangeLog: Automatic ChangeLog update (with a new
+	  program -- that's why the diff is so huge)
+
+2005-02-06 18:11  mosu
+
+	* trunk/libebml/make/linux/Makefile: Output an error if a mingw
+	  compiler is used with the Linux Makefile (I simply do that too
+	  often).
+
+2005-02-06 16:17  robux4
+
+	* trunk/libebml/src/EbmlBinary.cpp: libebml: remove wrong comment
+
+2005-02-05 21:34  robux4
+
+	* trunk/libebml/src/EbmlBinary.cpp: libebml: the previous commit had
+	  was b0rked
+
+2005-02-05 21:30  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
+	  libebml: allow binary element comparison (useful to compare UIDs)
+
+2005-01-10 22:49  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVoid.cpp: libebml: rename bSaveDefault in
+	  bKeepIntact
+
+2005-01-10 22:34  robux4
+
+	* trunk/libebml/ebml/EbmlElement.h: libebml: more comments on what
+	  size functions return and when they should be used
+
+2005-01-10 20:05  robux4
+
+	* trunk/libebml/ebml/EbmlMaster.h: libebml: don't save empty
+	  EbmlMasters by default
+
+2005-01-05 16:15  robux4
+
+	* trunk/libebml/ebml/c/libebml_t.h: patches from the VLC repository
+
+2004-11-30 15:41  mosu
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/src/EbmlBinary.cpp:
+	  Use malloc() and free() instead of new[] and delete[] where the
+	  lib might deal with pointers that have been allocated by the app,
+	  or where the app has allocated the memory. Reason: new[]ed memory
+	  cannot be realloc()ed.
+
+2004-11-19 12:17  mosu
+
+	* trunk/libebml/make/mingw32/Makefile: Compile libebml as a DLL by
+	  default (is anyone except me using this mingw Makefile anyway?).
+	  Do not remove the dependency file on "make clean".
+
+2004-11-17 08:45  mosu
+
+	* trunk/libebml/make/linux/Makefile: Do not remove the .depend file
+	  on "make clean".
+
+2004-11-14 10:39  mosu
+
+	* trunk/libebml/ebml/EbmlVersion.h: Numbers starting with '0' are
+	  octal numbers. Therefore a version number '0.8.3' can definitely
+	  not be expressed as '000803'. A very stupid mistake...
+
+2004-11-13 21:11  mosu
+
+	* trunk/libebml/make/mingw32: Also ignore the static lib.
+
+2004-11-13 21:09  mosu
+
+	* trunk/libebml/make/linux/Makefile, trunk/libebml/make/mingw32,
+	  trunk/libebml/make/mingw32/Makefile: Fixed "make depend" on mingw
+	  and some cleanup for the Linux Makefile.
+
+2004-11-13 11:30  mosu
+
+	* trunk/libebml/make/linux: Ignore the .depend file created by "make
+	  depend".
+
+2004-11-13 11:27  mosu
+
+	* trunk/libebml/make/linux/Makefile: Cleanup
+
+2004-11-13 11:25  mosu
+
+	* trunk/libebml/make/linux/Makefile: Improved the dependency
+	  calculation to be more portable (makedepend doesn't exist
+	  everywhere, and it doesn't necessarily use the compiler we want).
+
+2004-11-13 11:17  mosu
+
+	* trunk/libebml/ebml/EbmlMaster.h: Added a "RemoveAll" function.
+
+2004-11-10 20:48  mosu
+
+	* trunk/libebml/ChangeLog: Automatic ChangeLog update
+
+2004-11-10 20:47  mosu
+
+	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
+	  Bumped the version number to 0.7.3.
+
+2004-11-10 20:46  mosu
+
+	* trunk/libebml/ebml/EbmlId.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h: Added some operator!= to
+	  avoid confusion and mistakes with comparison and automatic
+	  casting.
+
+2004-10-18 19:28  robux4
+
+	* trunk/DvdMenuXtractor/DvdMenuXtractor.cpp,
+	  trunk/DvdMenuXtractor/IFOFile.cpp,
+	  trunk/DvdMenuXtractor/IFOFile.h,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp: better code to handle all VTS
+	  VOBs (not yet there)
+
+2004-10-14 07:48  mosu
+
+	* trunk/libebml/src/EbmlUnicodeString.cpp: wchar.h doesn't exist on
+	  OpenBSD. Patch by Diego Pettenò <dgp85 (a) users ! sourceforge !
+	  net>.
+
+2004-09-26 10:03  mosu
+
+	* trunk/libebml/ChangeLog: Automatic ChangeLog update
+
+2004-09-26 10:03  mosu
+
+	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
+	  Bumped the version number to 0.7.2.
+
+2004-09-23 22:54  mosu
+
+	* trunk/libebml/ebml/c/libebml_t.h: Fix for the compilation on
+	  Solaris. I also redid the #if... hierarchy to be a bit less
+	  confusing.
+
+2004-08-28 14:18  robux4
+
+	* trunk/libebml/ebml/EbmlFloat.h: remove the unsupported float80
+	  support
+
+2004-08-28 14:05  robux4
+
+	* trunk/libebml/ebml/EbmlContexts.h,
+	  trunk/libebml/ebml/EbmlEndian.h, trunk/libebml/ebml/EbmlFloat.h,
+	  trunk/libebml/make/vc7/dll,
+	  trunk/libebml/make/vc7/dll/libebmldll.v71.vcproj: allow building a
+	  DLL with MSVC7 (not compatible with the MinGW one)
+
+2004-08-10 12:27  robux4
+
+	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlFloat.h,
+	  trunk/libebml/src/EbmlFloat.cpp: remove fake 80 bits float support
+
+2004-07-31 08:56  robux4
+
+	* trunk/libebml/src/MemIOCallback.cpp: Apparently it's better this
+	  way on some compilers
+
+2004-07-26 17:49  mosu
+
+	* trunk/libebml/make/mingw32/Makefile: Proper description for the
+	  SHARED option.
+
+2004-07-25 10:11  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libebml/debian/changelog,
+	  trunk/libebml/ebml/EbmlVersion.h: Bumped the version number to
+	  0.7.1.
+
+2004-07-21 18:12  mosu
+
+	* trunk/libebml/src/EbmlUnicodeString.cpp: I still hate tabs.
+
+2004-07-21 18:09  mosu
+
+	* trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/src/EbmlUnicodeString.cpp: Do not use the same name
+	  as a standard C library function. Especially not if the return
+	  values are reversed!
+
+2004-07-19 16:39  mosu
+
+	* trunk/libebml/make/linux/Makefile: Let the user specify his own
+	  CXXFLAGS and CPPFLAGS.
+
+2004-07-09 21:18  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libebml/debian/rules: debian/rules
+	  should be executable, ChangeLog should not.
+
+2004-07-09 21:11  mosu
+
+	* trunk/libebml/make/linux: Ignore the created library.
+
+2004-07-09 20:59  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libebml/LICENSE.LGPL,
+	  trunk/libebml/debian/changelog, trunk/libebml/debian/control,
+	  trunk/libebml/debian/copyright, trunk/libebml/debian/dirs,
+	  trunk/libebml/debian/docs, trunk/libebml/debian/libebml-dev.dirs,
+	  trunk/libebml/debian/libebml-dev.files,
+	  trunk/libebml/debian/rules, trunk/libebml/ebml/Debug.h,
+	  trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlConfig.h,
+	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
+	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
+	  trunk/libebml/ebml/IOCallback.h,
+	  trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/ebml/StdIOCallback.h,
+	  trunk/libebml/ebml/c/libebml_t.h,
+	  trunk/libebml/make/linux/Makefile,
+	  trunk/libebml/make/mingw32/Makefile,
+	  trunk/libebml/make/mingw32/libebml.dev,
+	  trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlContexts.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlDummy.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlStream.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlSubHead.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libebml/src/IOCallback.cpp,
+	  trunk/libebml/src/MemIOCallback.cpp,
+	  trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: Set eol-style
+	  and keywords properties.
+
+2004-05-11 20:27  mosu
+
+	* trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/ebml/c/libebml_t.h,
+	  trunk/libebml/make/linux/Makefile: Compilation on BeOS. Patch by
+	  Vegard W&#65533;rp <devel at vegardw.com>
+
+2004-04-26 19:35  robux4
+
+	* trunk/libebml/make/vc7/Makefile,
+	  trunk/libmatroska/make/vc7/Makefile: Makefile to use the free
+	  VS.Net 2003 command-line compiler
+
+2004-04-24 09:09  mosu
+
+	* trunk/libebml/make/linux/Makefile,
+	  trunk/libmatroska/make/linux/Makefile: Set LD to CXX by default.
+
+2004-04-23 16:40  mosu
+
+	* trunk/libebml/ChangeLog: Updates
+
+2004-04-23 16:39  mosu
+
+	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
+	  Bumped version number to 0.7.0.
+
+2004-04-21 19:55  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog: Updates
+
+2004-04-14 23:17  robux4
+
+	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
+	  trunk/libebml/ebml/EbmlConfig.h,
+	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
+	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
+	  trunk/libebml/ebml/IOCallback.h,
+	  trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/ebml/StdIOCallback.h,
+	  trunk/libebml/ebml/c/libebml_t.h, trunk/libebml/src/Debug.cpp,
+	  trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlContexts.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlDummy.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlStream.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlSubHead.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libebml/src/IOCallback.cpp,
+	  trunk/libebml/src/MemIOCallback.cpp,
+	  trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: Switch to LGPL
+	  license
+
+2004-04-14 23:04  robux4
+
+	* trunk/libebml/LICENSE.GPL, trunk/libebml/LICENSE.LGPL,
+	  trunk/libebml/LICENSE.QPL, trunk/libmatroska/LICENSE.GPL,
+	  trunk/libmatroska/LICENSE.LGPL, trunk/libmatroska/LICENSE.QPL:
+	  Switch to LGPL license
+
+2004-03-09 20:33  mosu
+
+	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
+	  Updated the version number to 0.6.5.
+
+2004-03-09 20:27  mosu
+
+	* trunk/libebml/ChangeLog: Updates
+
+2004-03-09 20:05  mosu
+
+	* trunk/libebml/src/EbmlUnicodeString.cpp: Allow the cloning of
+	  empty strings.
+
+2004-03-06 07:45  jcsston
+
+	* trunk/libebml/src/EbmlElement.cpp: Fix for ebml coded sizes larger
+	  than 8 bytes, was overflowing the size buffer
+
+2004-02-18 07:19  jcsston
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: Added SetEOF()
+	  function, changed class private area to protected, added a
+	  static_cast to remove a warning
+
+2004-01-31 13:43  robux4
+
+	* trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlTypes.h,
+	  trunk/libebml/ebml/c/libebml_t.h,
+	  trunk/libmatroska/matroska/KaxConfig.h,
+	  trunk/libmatroska/matroska/c/libmatroska_t.h: Simplify and change
+	  the copyright holder (nothing left from Ingo)
+
+2004-01-24 16:57  mosu
+
+	* trunk/libebml/src/EbmlMaster.cpp: Allow elements to be added to
+	  the end of the master even with Insert.
+
+2004-01-19 10:33  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog: Updated the
+	  ChangeLog.
+
+2004-01-19 10:28  mosu
+
+	* trunk/libebml/debian/changelog, trunk/libebml/ebml/EbmlVersion.h:
+	  Bumped the version number.
+
+2004-01-17 21:41  mosu
+
+	* trunk/libebml/ebml/EbmlConfig.h: Removed some old and unused
+	  definition for DLL stuff in order to avoid confusion.
+
+2004-01-17 16:32  robux4
+
+	* trunk/libebml/src/EbmlMaster.cpp: Possibly fixed a problem with
+	  context handling in cases when we end a level with an unknown
+	  element
+
+2004-01-15 15:02  mosu
+
+	* trunk/libebml/ChangeLog: Updated the ChangeLog.
+
+2004-01-10 15:31  robux4
+
+	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
+	  trunk/libebml/ebml/EbmlConfig.h,
+	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
+	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
+	  trunk/libebml/ebml/IOCallback.h,
+	  trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/ebml/StdIOCallback.h, trunk/libebml/src/Debug.cpp,
+	  trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlContexts.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlDummy.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlStream.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlSubHead.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libebml/src/IOCallback.cpp,
+	  trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libmatroska/matroska/FileKax.h,
+	  trunk/libmatroska/matroska/KaxAttached.h,
+	  trunk/libmatroska/matroska/KaxAttachments.h,
+	  trunk/libmatroska/matroska/KaxBlock.h,
+	  trunk/libmatroska/matroska/KaxBlockData.h,
+	  trunk/libmatroska/matroska/KaxChapters.h,
+	  trunk/libmatroska/matroska/KaxCluster.h,
+	  trunk/libmatroska/matroska/KaxClusterData.h,
+	  trunk/libmatroska/matroska/KaxConfig.h,
+	  trunk/libmatroska/matroska/KaxContentEncoding.h,
+	  trunk/libmatroska/matroska/KaxContexts.h,
+	  trunk/libmatroska/matroska/KaxCues.h,
+	  trunk/libmatroska/matroska/KaxCuesData.h,
+	  trunk/libmatroska/matroska/KaxInfo.h,
+	  trunk/libmatroska/matroska/KaxInfoData.h,
+	  trunk/libmatroska/matroska/KaxSeekHead.h,
+	  trunk/libmatroska/matroska/KaxSegment.h,
+	  trunk/libmatroska/matroska/KaxTag.h,
+	  trunk/libmatroska/matroska/KaxTagMulti.h,
+	  trunk/libmatroska/matroska/KaxTags.h,
+	  trunk/libmatroska/matroska/KaxTrackAudio.h,
+	  trunk/libmatroska/matroska/KaxTrackEntryData.h,
+	  trunk/libmatroska/matroska/KaxTrackVideo.h,
+	  trunk/libmatroska/matroska/KaxTracks.h,
+	  trunk/libmatroska/matroska/KaxVersion.h,
+	  trunk/libmatroska/src/KaxAttached.cpp,
+	  trunk/libmatroska/src/KaxAttachments.cpp,
+	  trunk/libmatroska/src/KaxBlock.cpp,
+	  trunk/libmatroska/src/KaxBlockData.cpp,
+	  trunk/libmatroska/src/KaxChapters.cpp,
+	  trunk/libmatroska/src/KaxCluster.cpp,
+	  trunk/libmatroska/src/KaxClusterData.cpp,
+	  trunk/libmatroska/src/KaxContentEncoding.cpp,
+	  trunk/libmatroska/src/KaxContexts.cpp,
+	  trunk/libmatroska/src/KaxCues.cpp,
+	  trunk/libmatroska/src/KaxCuesData.cpp,
+	  trunk/libmatroska/src/KaxInfo.cpp,
+	  trunk/libmatroska/src/KaxInfoData.cpp,
+	  trunk/libmatroska/src/KaxSeekHead.cpp,
+	  trunk/libmatroska/src/KaxSegment.cpp,
+	  trunk/libmatroska/src/KaxTag.cpp,
+	  trunk/libmatroska/src/KaxTagMulti.cpp,
+	  trunk/libmatroska/src/KaxTags.cpp,
+	  trunk/libmatroska/src/KaxTrackAudio.cpp,
+	  trunk/libmatroska/src/KaxTrackEntryData.cpp,
+	  trunk/libmatroska/src/KaxTrackVideo.cpp,
+	  trunk/libmatroska/src/KaxTracks.cpp,
+	  trunk/libmatroska/src/KaxVersion.cpp,
+	  trunk/libmatroska/test/mux/test8.cpp,
+	  trunk/libmatroska/test/tags/test9.cpp: Update the copyright years
+
+2004-01-10 15:23  robux4
+
+	* trunk/libebml/src/EbmlElement.cpp: Fix a problem on the position
+	  esitmation (thx to Cyrius)
+
+2004-01-10 14:19  mosu
+
+	* trunk/libebml/make/mingw32/Makefile,
+	  trunk/libmatroska/make/mingw32/Makefile: Updated the MinGW build
+	  system.
+
+2004-01-10 14:18  mosu
+
+	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
+	  trunk/libebml/ebml/EbmlConfig.h,
+	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
+	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/ebml/IOCallback.h,
+	  trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/ebml/StdIOCallback.h: Added definitions that allow
+	  building libebml as a DLL on Windows.
+
+2004-01-06 22:15  robux4
+
+	* trunk/libebml/make/vc6/lib/static/libebml.dsp,
+	  trunk/libmatroska/make/vc6/lib/static/libmatroska.dsp:
+	  StdInclude.h doesn't exist anymore
+
+2004-01-06 22:12  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlTypes.h, trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/ebml/IOCallback.h,
+	  trunk/libebml/src/Debug.cpp: Fixes for the FreeBSD include order
+	  pb
+
+2004-01-06 21:23  robux4
+
+	* trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlContexts.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlDummy.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlStream.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlSubHead.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libebml/src/IOCallback.cpp,
+	  trunk/libebml/src/MemIOCallback.cpp,
+	  trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libebml/src/StdInclude.h: No more StdInclude use, should fix
+	  a FreeBSD warning
+
+2004-01-05 21:09  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/src/MemIOCallback.cpp: Make default scope reading
+	  where it was missing
+
+2004-01-05 11:24  mosu
+
+	* trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/make/linux/Makefile, trunk/libebml/src/Debug.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/StdIOCallback.cpp: Fixed a number of warnings
+	  (shadowed and uinitialized variables).
+
+2004-01-01 13:28  mosu
+
+	* trunk/libebml/debian/rules, trunk/libmatroska/debian/rules: Also
+	  install the ChangeLog.
+
+2004-01-01 13:20  mosu
+
+	* trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog,
+	  trunk/libmatroska/ChangeLog.txt: Added a ChangeLog.
+
+2003-12-28 19:31  mosu
+
+	* trunk/libebml/ebml/MemIOCallback.h: Fix for some gcc versions
+	  which hickup on min being defined in their C++ stream headers.
+
+2003-12-28 01:04  jcsston
+
+	* trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/src/MemIOCallback.cpp: Some updates/fixes
+
+2003-12-25 12:28  mosu
+
+	* trunk/libebml/debian/changelog: Updated version information.
+
+2003-11-12 16:38  mosu
+
+	* trunk/libebml/ebml/EbmlVersion.h: Updated the version number due
+	  to the interface change in EbmlBinary.Read().
+
+2003-11-12 15:24  mosu
+
+	* trunk/libebml/ebml/EbmlEndian.h: Fixes for big endian/RISC
+	  processors that do not allow non-aligned reads/writes for word or
+	  bigger sized objects.
+
+2003-11-03 22:17  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/src/EbmlBinary.cpp, trunk/libebml/src/EbmlCrc32.cpp,
+	  trunk/libebml/src/EbmlDate.cpp, trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libmatroska/matroska/KaxBlock.h,
+	  trunk/libmatroska/src/KaxBlock.cpp,
+	  trunk/libmatroska/test/mux/test8.cpp: Better handling of scope
+	  reading
+
+2003-11-03 22:13  robux4
+
+	* trunk/libebml/ebml/EbmlTypes.h: Some Cleanup
+
+2003-10-31 12:29  mosu
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlMaster.h:
+	  Added forgotten default values for ReadData.
+
+2003-10-31 08:52  mosu
+
+	* trunk/libebml/ebml/EbmlHead.h, trunk/libebml/ebml/EbmlSubHead.h:
+	  Fixed the new line/carriage return mess.
+
+2003-10-31 08:34  mosu
+
+	* trunk/libebml/debian/changelog: New version number.
+
+2003-10-30 23:09  robux4
+
+	* trunk/libebml/ebml/EbmlVersion.h: new version for the addition
+
+2003-10-30 23:06  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/src/EbmlBinary.cpp, trunk/libebml/src/EbmlCrc32.cpp,
+	  trunk/libebml/src/EbmlDate.cpp, trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp: Allow some elements not
+	  to be fully read
+
+2003-10-28 22:05  mosu
+
+	* trunk/libebml/src/EbmlMaster.cpp: Fixes for compilation with gcc
+	  2.95.
+
+2003-10-28 21:46  mosu
+
+	* trunk/libebml/debian/changelog: Updated version number.
+
+2003-10-28 21:01  robux4
+
+	* trunk/libebml/ebml/EbmlVersion.h: Update the version number
+
+2003-10-28 20:55  robux4
+
+	* trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libmatroska/matroska/KaxBlock.h,
+	  trunk/libmatroska/src/KaxBlock.cpp: EBML-size handling is more
+	  general and handle the Unknown Size
+
+2003-10-25 15:09  mosu
+
+	* trunk/libebml/make/mingw32/Makefile,
+	  trunk/libmatroska/make/mingw32/Makefile: Support the same targest
+	  as the Linux Makefile.
+
+2003-10-24 22:03  mosu
+
+	* trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/src/EbmlElement.cpp: Changed the buffer size
+	  paramter from the much too small "char" to uint32.
+
+2003-10-22 14:18  pamel
+
+	* trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libmatroska/matroska/KaxTypes.h,
+	  trunk/libmatroska/src/KaxBlock.cpp: New lacing modes reading.
+
+2003-10-21 21:21  robux4
+
+	* trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/src/EbmlElement.cpp, trunk/libebml/src/EbmlVoid.cpp:
+	  New way to compute the EBML-coded length
+
+2003-10-16 21:13  mosu
+
+	* trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp: Fixed some warnings.
+	  Nothing major.
+
+2003-10-15 20:34  mosu
+
+	* trunk/libebml/make/linux/Makefile,
+	  trunk/libmatroska/make/linux/Makefile: Removed -pedantic due to
+	  problems on FreeBSD.
+
+2003-10-15 05:47  jcsston
+
+	* trunk/libebml/ebml/EbmlBinary.h,
+	  trunk/libebml/ebml/StdIOCallback.h: Define/includes for Borland
+	  C++ complier, from Zen
+
+2003-10-08 15:50  jcsston
+
+	* trunk/MatroskaUtils/MatroskaCDL.rc,
+	  trunk/MatroskaUtils/MatroskaPages.cpp,
+	  trunk/MatroskaUtils/MatroskaUtils.cpp,
+	  trunk/MatroskaUtils/MatroskaUtils.h,
+	  trunk/MatroskaUtils/ShellExtension/MatroskaProp.cpp,
+	  trunk/MatroskaUtils/ShellExtension/MatroskaProp.def,
+	  trunk/MatroskaUtils/ShellExtension/MatroskaProp.vcproj,
+	  trunk/MatroskaUtils/mdump.cpp, trunk/MatroskaUtils/mdump.h,
+	  trunk/MatroskaUtils/version.ver,
+	  trunk/libebml/src/platform/win32/WinIOCallback.cpp: Works under
+	  Win9x
+
+2003-10-08 07:46  mosu
+
+	* trunk/libebml/ebml/EbmlConfig.h: Added AMD64 to the list of Little
+	  Endian processors.
+
+2003-09-29 20:56  robux4
+
+	* trunk/libebml/ebml/EbmlMaster.h, trunk/libebml/src/EbmlMaster.cpp:
+	  Added InsertElement()
+
+2003-09-28 20:15  jcsston
+
+	* trunk/libebml/ebml/EbmlMaster.h, trunk/libebml/src/EbmlMaster.cpp:
+	  Added FindAllMissingElements() method
+
+2003-09-28 20:11  jcsston
+
+	* trunk/libebml/ebml/MemIOCallback.h: Added SetDataBufferSize()
+	  method
+
+2003-09-17 20:28  mosu
+
+	* trunk/libebml/debian/changelog: Updated version information.
+
+2003-09-15 02:31  jcsston
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: Added Cyrius to
+	  the authors list
+
+2003-09-15 02:24  jcsston
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: Updated to have
+	  even better error reporting, also takes Unicode and ANSI filenames
+	  regardless of compile defines
+
+2003-09-14 08:22  robux4
+
+	* trunk/libebml/ebml/EbmlVersion.h: New version to reflect changes
+	  in constructors
+
+2003-09-13 20:41  robux4
+
+	* trunk/libebml/ebml/EbmlConfig.h: Added a new define for assertion
+
+2003-09-13 17:48  robux4
+
+	* trunk/libebml/ebml/EbmlHead.h, trunk/libebml/ebml/EbmlSubHead.h,
+	  trunk/libmatroska/matroska/KaxAttached.h,
+	  trunk/libmatroska/matroska/KaxAttachments.h,
+	  trunk/libmatroska/matroska/KaxBlock.h,
+	  trunk/libmatroska/matroska/KaxBlockData.h,
+	  trunk/libmatroska/matroska/KaxChapters.h,
+	  trunk/libmatroska/matroska/KaxCluster.h,
+	  trunk/libmatroska/matroska/KaxClusterData.h,
+	  trunk/libmatroska/matroska/KaxCues.h,
+	  trunk/libmatroska/matroska/KaxCuesData.h,
+	  trunk/libmatroska/matroska/KaxInfo.h,
+	  trunk/libmatroska/matroska/KaxInfoData.h,
+	  trunk/libmatroska/matroska/KaxSeekHead.h,
+	  trunk/libmatroska/matroska/KaxSegment.h,
+	  trunk/libmatroska/matroska/KaxTag.h,
+	  trunk/libmatroska/matroska/KaxTagMulti.h,
+	  trunk/libmatroska/matroska/KaxTags.h,
+	  trunk/libmatroska/matroska/KaxTrackAudio.h,
+	  trunk/libmatroska/matroska/KaxTrackEntryData.h,
+	  trunk/libmatroska/matroska/KaxTrackVideo.h,
+	  trunk/libmatroska/matroska/KaxTracks.h,
+	  trunk/libmatroska/test/mux/test6.cpp: Added a Clone() method and a
+	  IsMaster() method
+
+2003-09-13 17:24  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlConfig.h,
+	  trunk/libebml/ebml/EbmlCrc32.h, trunk/libebml/ebml/EbmlDate.h,
+	  trunk/libebml/ebml/EbmlDummy.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlString.h, trunk/libebml/ebml/EbmlSubHead.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
+	  trunk/libebml/src/EbmlBinary.cpp, trunk/libebml/src/EbmlCrc32.cpp,
+	  trunk/libebml/src/EbmlDate.cpp, trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp: Added a Clone() method
+	  and a IsMaster() method
+
+2003-09-03 21:36  cyrius
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: Win32 file flags
+	  parameter
+
+2003-09-03 20:38  robux4
+
+	* trunk/libebml/src/EbmlVoid.cpp: Fix a bug in ReplaceWith,
+	  hopefully it will not break anything else
+
+2003-09-01 21:58  robux4
+
+	* trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
+	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDummy.h, trunk/libebml/ebml/EbmlEndian.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlSubHead.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
+	  trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlContexts.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDummy.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlStream.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlSubHead.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp:
+	  libebml is not libmatroska
+
+2003-09-01 12:42  mosu
+
+	* trunk/libebml/LICENSE.GPL: Changed libmatroska to libebml.
+
+2003-09-01 11:36  mosu
+
+	* trunk/libebml/debian/changelog: New version number.
+
+2003-08-30 08:19  mosu
+
+	* trunk/libebml/ebml/EbmlVersion.h: Bumped version number to mark
+	  robux' changes in Read().
+
+2003-08-29 19:48  robux4
+
+	* trunk/libebml/src/EbmlElement.cpp: Changed the order of element
+	  checking
+
+2003-08-21 20:41  jcsston
+
+	* trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/src/EbmlUnicodeString.cpp: Removed my changes to
+	  UTFstring
+
+2003-08-04 07:36  robux4
+
+	* trunk/libebml/ebml/EbmlVersion.h,
+	  trunk/libmatroska/matroska/KaxVersion.h: Remove some old TODO
+
+2003-08-02 21:38  robux4
+
+	* trunk/libebml/src/EbmlUnicodeString.cpp: Fix a problem with some
+	  UCS-2 chars
+
+2003-08-01 22:25  robux4
+
+	* trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/src/MemIOCallback.cpp: Additions for easier Checksum
+	  manipulation
+
+2003-08-01 12:03  robux4
+
+	* trunk/libebml/make/vc7/lib/libebml.v71.vcproj,
+	  trunk/libmatroska/make/vc7/lib/static/libmatroska.v71.vcproj,
+	  trunk/mkxds/mkxds.v71.sln, trunk/mkxds/mkxds.v71.vcproj: Added
+	  VC7.1 (VS.Net 2003) projects
+
+2003-08-01 03:49  jcsston
+
+	* trunk/libebml/src/EbmlUnicodeString.cpp: *** empty log message ***
+
+2003-08-01 03:41  jcsston
+
+	* trunk/libebml/ebml/EbmlUnicodeString.h: *** empty log message ***
+
+2003-07-31 19:42  robux4
+
+	* trunk/libebml/ebml/EbmlCrc32.h, trunk/libebml/ebml/EbmlDate.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlUInteger.h, trunk/libebml/ebml/EbmlVoid.h,
+	  trunk/libebml/src/EbmlCrc32.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libmatroska/src/KaxBlock.cpp: Some fixes for better casting
+	  / type checking
+
+2003-07-31 07:53  jcsston
+
+	* trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/src/EbmlUnicodeString.cpp: Added some string
+	  functions and overloaded operators
+
+2003-07-30 09:31  robux4
+
+	* trunk/libebml/src/EbmlElement.cpp: Less processing in non Debug
+	  mode
+
+2003-07-29 21:43  robux4
+
+	* trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libmatroska/matroska/KaxBlock.h,
+	  trunk/libmatroska/matroska/KaxTrackVideo.h,
+	  trunk/libmatroska/src/KaxBlock.cpp,
+	  trunk/libmatroska/src/KaxTrackVideo.cpp: Checksum now doesn't care
+	  about mandatory data
+
+2003-07-28 22:54  robux4
+
+	* trunk/libebml/src/EbmlMaster.cpp: Fix a memory leak
+
+2003-07-28 22:42  robux4
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: Fix for some
+	  compilers
+
+2003-07-28 08:49  mosu
+
+	* trunk/libebml/debian/changelog,
+	  trunk/libmatroska/debian/changelog,
+	  trunk/libmatroska/debian/control: Updated version information.
+
+2003-07-27 20:28  mosu
+
+	* trunk/libebml/make/mingw32/Makefile,
+	  trunk/libmatroska/make/mingw32/Makefile: Necessary fixes for
+	  compilation with mingw.
+
+2003-07-26 15:18  mosu
+
+	* trunk/libebml/make/mingw32/Makefile: Needed updates for
+	  compilation with mingw.
+
+2003-07-25 20:06  robux4
+
+	* trunk/libebml/src/EbmlMaster.cpp: Fix a bug of Read() when the
+	  size is zero
+
+2003-07-23 18:23  jcsston
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: Added better
+	  detection if the file was really opened or not
+
+2003-07-23 17:17  jcsston
+
+	* trunk/libebml/ebml/c/libebml_t.h: Added Mosu's name to the author
+	  list
+
+2003-07-22 21:40  jcsston
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: Added
+	  MODE_SAFE for opening
+
+2003-07-21 20:39  cyrius
+
+	* trunk/libebml/src/EbmlVoid.cpp: Element size fixed
+
+2003-07-21 20:23  cyrius
+
+	* trunk/libebml/src/platform/win32/WinIOCallback.cpp: 4GB limit
+	  fixed
+
+2003-07-21 02:42  jcsston
+
+	* trunk/libebml/ebml/c/libebml_t.h: Mosu's fixes to compile with
+	  Win32 GCC
+
+2003-07-17 09:48  mosu
+
+	* trunk/libebml/make/linux/Makefile,
+	  trunk/libmatroska/make/linux/Makefile: Proper Makefile that also
+	  installs the header files.
+
+2003-07-17 09:45  mosu
+
+	* trunk/libebml/make/linux/Makefile: Changes for the new directory
+	  structure for the "install" target.
+
+2003-07-16 22:09  jcsston
+
+	* trunk/libebml/make/vc7/lib/libebml.vcproj: Corrected Additional
+	  Include Directories
+
+2003-07-16 22:07  jcsston
+
+	* trunk/libebml/src/MemIOCallback.cpp: Fixed the Read() function to
+	  support seeking
+
+2003-07-16 16:21  mosu
+
+	* trunk/libebml/make/linux/Makefile,
+	  trunk/libmatroska/make/linux/Makefile: Removed old stuff.
+
+2003-07-16 15:13  robux4
+
+	* trunk/libebml/ebml/c, trunk/libebml/ebml/c/libebml_t.h,
+	  trunk/libebml/make/mingw32, trunk/libebml/make/mingw32/Makefile,
+	  trunk/libebml/make/mingw32/libebml.dev, trunk/libebml/make/vc6,
+	  trunk/libebml/make/vc6/lib, trunk/libebml/make/vc6/lib/static,
+	  trunk/libebml/make/vc6/lib/static/libebml.dsp,
+	  trunk/libebml/make/vc6/libebml.dsw, trunk/libebml/make/vc7,
+	  trunk/libebml/make/vc7/lib,
+	  trunk/libebml/make/vc7/lib/libebml.vcproj: Initial CVS version
+	  after the crash
+
+2003-07-16 15:02  robux4
+
+	* trunk/libebml/make, trunk/libebml/make/linux,
+	  trunk/libebml/make/linux/Makefile: Initial CVS version after the
+	  crash
+
+2003-07-16 14:46  robux4
+
+	* trunk/libebml, trunk/libebml/LICENSE.GPL,
+	  trunk/libebml/LICENSE.QPL, trunk/libebml/debian,
+	  trunk/libebml/debian/changelog, trunk/libebml/debian/control,
+	  trunk/libebml/debian/copyright, trunk/libebml/debian/dirs,
+	  trunk/libebml/debian/docs, trunk/libebml/debian/libebml-dev.dirs,
+	  trunk/libebml/debian/libebml-dev.files,
+	  trunk/libebml/debian/rules, trunk/libebml/ebml,
+	  trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,
+	  trunk/libebml/ebml/EbmlConfig.h,
+	  trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,
+	  trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,
+	  trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,
+	  trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,
+	  trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,
+	  trunk/libebml/ebml/EbmlSInteger.h,
+	  trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,
+	  trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,
+	  trunk/libebml/ebml/EbmlUInteger.h,
+	  trunk/libebml/ebml/EbmlUnicodeString.h,
+	  trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,
+	  trunk/libebml/ebml/IOCallback.h,
+	  trunk/libebml/ebml/MemIOCallback.h,
+	  trunk/libebml/ebml/StdIOCallback.h, trunk/libebml/src,
+	  trunk/libebml/src/Debug.cpp, trunk/libebml/src/EbmlBinary.cpp,
+	  trunk/libebml/src/EbmlContexts.cpp,
+	  trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,
+	  trunk/libebml/src/EbmlDummy.cpp,
+	  trunk/libebml/src/EbmlElement.cpp,
+	  trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,
+	  trunk/libebml/src/EbmlMaster.cpp,
+	  trunk/libebml/src/EbmlSInteger.cpp,
+	  trunk/libebml/src/EbmlStream.cpp,
+	  trunk/libebml/src/EbmlString.cpp,
+	  trunk/libebml/src/EbmlSubHead.cpp,
+	  trunk/libebml/src/EbmlUInteger.cpp,
+	  trunk/libebml/src/EbmlUnicodeString.cpp,
+	  trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,
+	  trunk/libebml/src/IOCallback.cpp,
+	  trunk/libebml/src/MemIOCallback.cpp,
+	  trunk/libebml/src/StdIOCallback.cpp,
+	  trunk/libebml/src/StdInclude.h, trunk/libebml/src/platform,
+	  trunk/libebml/src/platform/win32,
+	  trunk/libebml/src/platform/win32/WinIOCallback.cpp,
+	  trunk/libebml/src/platform/win32/WinIOCallback.h: Initial CVS
+	  version after the crash
+
diff --git a/LICENSE.LGPL b/LICENSE.LGPL
index b1e3f5a..cbee875 100644
--- a/LICENSE.LGPL
+++ b/LICENSE.LGPL
@@ -1,504 +1,504 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/debian/changelog b/debian/changelog
index daa83f2..67f1480 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+libebml (0.8.0-1) karmic; urgency=low
+
+  * New version.
+
+ -- Moritz Bunkus <moritz at bunkus.org>  Sun, 09 May 2010 16:56:41 +0200
+
+libebml (0.7.8-1) unstable; urgency=low
+
+  * New version.
+
+ -- Moritz Bunkus <moritz at bunkus.org>  Wed,  5 Mar 2008 12:04:07 +0100
+
 libebml (0.7.7-1) unstable; urgency=low
 
   * New version.
diff --git a/debian/rules b/debian/rules
old mode 100755
new mode 100644
diff --git a/ebml/EbmlBinary.h b/ebml/EbmlBinary.h
index 60289f4..ef47cdc 100644
--- a/ebml/EbmlBinary.h
+++ b/ebml/EbmlBinary.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -30,14 +30,14 @@
 
 /*!
 	\file
-	\version \$Id: EbmlBinary.h 1112 2005-03-28 09:55:50Z mosu $
+	\version \$Id: EbmlBinary.h 1298 2008-02-21 22:14:18Z mosu $
 	\author Steve Lhomme     <robux4 @ users.sf.net>
 	\author Julien Coloos	<suiryc @ users.sf.net>
 */
 #ifndef LIBEBML_BINARY_H
 #define LIBEBML_BINARY_H
 
-#include <string>
+#include <cstring>
 
 #include "EbmlTypes.h"
 #include "EbmlElement.h"
@@ -62,14 +62,16 @@ class EBML_DLL_API EbmlBinary : public EbmlElement {
 		EbmlBinary(const EbmlBinary & ElementToClone);
 		virtual ~EbmlBinary(void);
 	
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false);
+		virtual bool ValidateSize() const {return true;} // we don't mind about what's inside
+
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
 	
 		void SetBuffer(const binary *Buffer, const uint32 BufferSize) {
 			Data = (binary *) Buffer;
-			Size = BufferSize;
-			bValueIsSet = true;
+			SetSize_(BufferSize);
+			SetValueIsSet();
 		}
 
 		binary *GetBuffer() const {return Data;}
@@ -79,11 +81,10 @@ class EBML_DLL_API EbmlBinary : public EbmlElement {
 				free(Data);
 			Data = (binary *)malloc(BufferSize * sizeof(binary));
 			memcpy(Data, Buffer, BufferSize);
-			Size = BufferSize;
-			bValueIsSet = true;
+			SetSize_(BufferSize);
+			SetValueIsSet();
 		}
 		
-		uint64 GetSize() const {return Size;}
 		operator const binary &() const {return *Data;}
 	
 		bool IsDefaultValue() const {
@@ -92,7 +93,11 @@ class EBML_DLL_API EbmlBinary : public EbmlElement {
 
 		bool operator==(const EbmlBinary & ElementToCompare) const;
 
+#if defined(EBML_STRICT_API)
+	private:
+#else
 	protected:
+#endif
 		binary *Data; // the binary data inside the element
 };
 
diff --git a/ebml/EbmlConfig.h b/ebml/EbmlConfig.h
index d042a6e..a66a41b 100644
--- a/ebml/EbmlConfig.h
+++ b/ebml/EbmlConfig.h
@@ -36,6 +36,14 @@
 #ifndef LIBEBML_CONFIG_H
 #define LIBEBML_CONFIG_H
 
+#if defined(__linux__)
+#include <endian.h>
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#undef WORDS_BIGENDIAN
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define WORDS_BIGENDIAN 1
+#endif
+#else
 // automatic endianess detection working on GCC
 #if !defined(WORDS_BIGENDIAN)
 #if (defined (__arm__) && ! defined (__ARMEB__)) || defined (__i386__) || defined (__i860__) || defined (__ns32000__) || defined (__vax__) || defined (__amd64__) || defined (__x86_64__)
@@ -47,6 +55,7 @@
 #undef WORDS_BIGENDIAN // for my testing platform (x86)
 #endif
 #endif // not autoconf
+#endif
 
 #define LIBEBML_NAMESPACE libebml
 #if defined(NO_NAMESPACE) // for older GCC
diff --git a/ebml/EbmlContexts.h b/ebml/EbmlContexts.h
index a18fa07..9e9cb65 100644
--- a/ebml/EbmlContexts.h
+++ b/ebml/EbmlContexts.h
@@ -50,8 +50,9 @@ extern const EbmlSemanticContext EBML_DLL_API EDocType_Context;
 extern const EbmlSemanticContext EBML_DLL_API EDocTypeVersion_Context;
 extern const EbmlSemanticContext EBML_DLL_API EDocTypeReadVersion_Context;
 
+#define Context_EbmlHead EbmlHead_Context
+	
 // global elements
-extern const EbmlSemanticContext EBML_DLL_API EbmlVoid_Context;
 extern const EbmlSemanticContext EBML_DLL_API & GetEbmlGlobal_Context();
 	
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlCrc32.h b/ebml/EbmlCrc32.h
index 902aa59..f04fbf0 100644
--- a/ebml/EbmlCrc32.h
+++ b/ebml/EbmlCrc32.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -30,13 +30,15 @@
 
 /*!
 	\file
-	\version \$Id: EbmlCrc32.h 1155 2005-05-06 11:43:38Z robux4 $
+	\version \$Id: EbmlCrc32.h 1326 2009-08-23 00:47:52Z robux4 $
 	\author Steve Lhomme     <robux4 @ users.sf.net>
 	\author Jory Stone       <jcsston @ toughguy.net>
 */
 #ifndef LIBEBML_CRC32_H
 #define LIBEBML_CRC32_H
 
+#include <cassert>
+
 #include "EbmlTypes.h"
 #include "EbmlBinary.h"
 
@@ -52,25 +54,18 @@ const uint32 CRC32_NEGL = 0xffffffffL;
 # define CRC32_SHIFTED(c) (c >> 8)
 #endif
 
-class EBML_DLL_API EbmlCrc32 : public EbmlBinary {
+DECLARE_EBML_BINARY(EbmlCrc32)
 	public:
-		EbmlCrc32();
 		EbmlCrc32(const EbmlCrc32 & ElementToClone);
-		static EbmlElement & Create() {return *(new EbmlCrc32);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		bool ValidateSize() const {return (Size == 4);}
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
-//		uint64 UpdateSize(bool bKeepIntact = false);
+		virtual bool ValidateSize() const {return (GetSize() == 4);}
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+//		filepos_t UpdateSize(bool bWithDefault = false);
 		
-		static const EbmlCallbacks ClassInfos;
 		bool IsDefaultValue() const {
 			return false;
 		}
 
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		bool IsYourId(const EbmlId & TestId) const;
-	
 		void AddElementCRC32(EbmlElement &ElementToCRC);
 		bool CheckElementCRC32(EbmlElement &ElementToCRC);
 		
@@ -103,17 +98,21 @@ class EBML_DLL_API EbmlCrc32 : public EbmlBinary {
 			return m_crc_final;
 		};
 	
-		void ForceCrc32(uint32 NewValue) { m_crc_final = NewValue; bValueIsSet = true;}
-
-		EbmlElement * Clone() const;
+		void ForceCrc32(uint32 NewValue) { m_crc_final = NewValue; SetValueIsSet();}
 
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		void ResetCRC() {m_crc = CRC32_NEGL;}
 		void UpdateByte(binary b) {m_crc = m_tab[CRC32_INDEX(m_crc) ^ b] ^ CRC32_SHIFTED(m_crc);}
 
 		static const uint32 m_tab[256];
 		uint32 m_crc;
 		uint32 m_crc_final;
+        
+        EBML_CONCRETE_CLASS(EbmlCrc32)
 };
 
 template <class T>
@@ -143,7 +142,7 @@ inline T2 ModPowerOf2(T1 a, T2 b)
 
 inline bool IsAlignedOn(const void *p, unsigned int alignment)
 {
-	return IsPowerOf2(alignment) ? ModPowerOf2((unsigned long)p, alignment) == 0 : (unsigned long)p % alignment == 0;
+	return IsPowerOf2(alignment) ? ModPowerOf2((uintptr_t)p, alignment) == 0 : (uintptr_t)p % alignment == 0;
 }
 
 template <class T>
diff --git a/ebml/EbmlDate.h b/ebml/EbmlDate.h
index 7adefdd..3f66c3f 100644
--- a/ebml/EbmlDate.h
+++ b/ebml/EbmlDate.h
@@ -3,18 +3,18 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This library is free software; you can redistribute it and/or
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -47,45 +47,49 @@ class EBML_DLL_API EbmlDate : public EbmlElement {
 	public:
 		EbmlDate() :EbmlElement(8, false), myDate(0) {}
 		EbmlDate(const EbmlDate & ElementToClone);
-		
+
 		/*!
 			\brief set the date with a UNIX/C/EPOCH form
 			\param NewDate UNIX/C date in UTC (no timezone)
 		*/
-		void SetEpochDate(int32 NewDate) {bValueIsSet = true; myDate = int64(NewDate - UnixEpochDelay) * 1000000000; bValueIsSet = true;}
+		void SetEpochDate(int32 NewDate) {myDate = int64(NewDate - UnixEpochDelay) * 1000000000; SetValueIsSet();}
 
 		/*!
 			\brief get the date with a UNIX/C/EPOCH form
 			\note the date is in UTC (no timezone)
 		*/
 		int32 GetEpochDate() const {return int32(myDate/1000000000 + UnixEpochDelay);}
-	
-		bool ValidateSize() const {return ((Size == 8) || (Size == 0));}
+
+		virtual bool ValidateSize() const {return ((GetSize() == 8) || (GetSize() == 0));}
 
 		/*!
 			\note no Default date handled
 		*/
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false) {
-			if(!bValueIsSet) 
-				Size = 0;
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false) {
+			if(!ValueIsSet())
+				SetSize_(0);
 			else
-				Size = 8;
-			return Size;
+				SetSize_(8);
+			return GetSize();
 		}
-		
-		bool operator<(const EbmlDate & EltCmp) const {return myDate < EltCmp.myDate;}
-		
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+
+		virtual bool IsSmallerThan(const EbmlElement *Cmp) const;
+
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
 
 		bool IsDefaultValue() const {
 			return false;
 		}
 
-	protected:
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+
 		int64 myDate; ///< internal format of the date
-	
+
 		static const uint64 UnixEpochDelay;
 };
 
diff --git a/ebml/EbmlDummy.h b/ebml/EbmlDummy.h
index 3c91f43..2b8774c 100644
--- a/ebml/EbmlDummy.h
+++ b/ebml/EbmlDummy.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -45,20 +45,19 @@ class EBML_DLL_API EbmlDummy : public EbmlBinary {
 		EbmlDummy() :DummyId(DummyRawId)  {}
 		EbmlDummy(const EbmlId & aId) :EbmlBinary(), DummyId(aId) {}
 		EbmlDummy(const EbmlDummy & ElementToClone):EbmlBinary(ElementToClone), DummyId(ElementToClone.DummyId) {}
-		static EbmlElement & Create() {return *(new EbmlDummy);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return DummyId;}
 
-		bool ValidateSize() const {return true;}
 		bool IsDummy() const {return true;}
 		bool IsDefaultValue() const {return true;}
 
-		EbmlElement * Clone() const {return new EbmlDummy(*this);}
-
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		const EbmlId DummyId;
 		static const EbmlId DummyRawId;
+
+        EBML_CONCRETE_CLASS(EbmlDummy)
 };
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlElement.h b/ebml/EbmlElement.h
index ebe7e6e..3a1ded9 100644
--- a/ebml/EbmlElement.h
+++ b/ebml/EbmlElement.h
@@ -3,18 +3,18 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This library is free software; you can redistribute it and/or
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -34,8 +34,6 @@
 #ifndef LIBEBML_ELEMENT_H
 #define LIBEBML_ELEMENT_H
 
-#include <cassert>
-
 #include "EbmlTypes.h"
 #include "EbmlId.h"
 #include "IOCallback.h"
@@ -80,19 +78,197 @@ class EbmlStream;
 class EbmlSemanticContext;
 class EbmlElement;
 
+extern const EbmlSemanticContext Context_EbmlGlobal;
+
+#define DEFINE_xxx_CONTEXT(x,global) \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(countof(ContextList_##x), ContextList_##x, NULL, global, NULL); \
+
+#define DEFINE_xxx_MASTER(x,id,idl,parent,name,global) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(countof(ContextList_##x), ContextList_##x, &Context_##parent, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
+    x::x() :EbmlMaster(Context_##x) {}
+
+#define DEFINE_xxx_MASTER_CONS(x,id,idl,parent,name,global) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(countof(ContextList_##x), ContextList_##x, &Context_##parent, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x);
+
+#define DEFINE_xxx_MASTER_ORPHAN(x,id,idl,name,global) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(countof(ContextList_##x), ContextList_##x, NULL, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
+
+#define DEFINE_xxx_CLASS(x,id,idl,parent,name,global) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, &Context_##parent, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
+    x::x() {}
+
+#define DEFINE_xxx_CLASS_CONS(x,id,idl,parent,name,global) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, &Context_##parent, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x);
+
+#define DEFINE_xxx_UINTEGER_DEF(x,id,idl,parent,name,global,defval) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, &Context_##parent, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
+    x::x() :EbmlUInteger(defval) {}
+
+#define DEFINE_xxx_STRING_DEF(x,id,idl,parent,name,global,defval) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, &Context_##parent, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
+    x::x() :EbmlString(defval) {}
+
+#define DEFINE_xxx_FLOAT_DEF(x,id,idl,parent,name,global,defval) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, &Context_##parent, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
+    x::x() :EbmlFloat(defval) {}
+
+#define DEFINE_xxx_CLASS_GLOBAL(x,id,idl,name,global) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_EbmlGlobal); \
+
+#define DEFINE_xxx_CLASS_ORPHAN(x,id,idl,name,global) \
+    const EbmlId Id_##x    (id, idl); \
+    const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, NULL, global, &EBML_INFO(x)); \
+    const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
+
+#define DEFINE_EBML_CONTEXT(x)                             DEFINE_xxx_CONTEXT(x,*GetEbmlGlobal_Context)
+#define DEFINE_EBML_MASTER(x,id,idl,parent,name)           DEFINE_xxx_MASTER(x,id,idl,parent,name,*GetEbmlGlobal_Context)
+#define DEFINE_EBML_MASTER_ORPHAN(x,id,idl,name)           DEFINE_xxx_MASTER_ORPHAN(x,id,idl,name,*GetEbmlGlobal_Context)
+#define DEFINE_EBML_CLASS(x,id,idl,parent,name)            DEFINE_xxx_CLASS(x,id,idl,parent,name,*GetEbmlGlobal_Context)
+#define DEFINE_EBML_CLASS_GLOBAL(x,id,idl,name)            DEFINE_xxx_CLASS_GLOBAL(x,id,idl,name,*GetEbmlGlobal_Context)
+#define DEFINE_EBML_CLASS_ORPHAN(x,id,idl,name)            DEFINE_xxx_CLASS_ORPHAN(x,id,idl,name,*GetEbmlGlobal_Context)
+#define DEFINE_EBML_UINTEGER_DEF(x,id,idl,parent,name,val) DEFINE_xxx_UINTEGER_DEF(x,id,idl,parent,name,*GetEbmlGlobal_Context,val)
+#define DEFINE_EBML_STRING_DEF(x,id,idl,parent,name,val)   DEFINE_xxx_STRING_DEF(x,id,idl,parent,name,*GetEbmlGlobal_Context,val)
+#define DEFINE_EBML_BINARY_CONS(x,id,idl,parent,name)      DEFINE_xxx_CLASS_CONS(x,id,idl,parent,name,*GetEbmlGlobal_Context)
+
+#define DEFINE_SEMANTIC_CONTEXT(x)
+#define DEFINE_START_SEMANTIC(x)     static const EbmlSemantic ContextList_##x[] = {
+#define DEFINE_END_SEMANTIC(x)       };
+#define DEFINE_SEMANTIC_ITEM(m,u,c)  EbmlSemantic(m, u, EBML_INFO(c)),
+
+#define DECLARE_EBML_MASTER(x)  class EBML_DLL_API x : public EbmlMaster { \
+  public: \
+    x();
+#define DECLARE_EBML_UINTEGER(x)  class EBML_DLL_API x : public EbmlUInteger { \
+  public: \
+    x();
+#define DECLARE_EBML_STRING(x)    class EBML_DLL_API x : public EbmlString { \
+  public: \
+    x();
+#define DECLARE_EBML_BINARY(x)    class EBML_DLL_API x : public EbmlBinary { \
+  public: \
+    x();
+
+#if defined(EBML_STRICT_API)
+#define EBML_CONCRETE_CLASS(Type) \
+    public: \
+        virtual const EbmlSemanticContext &Context() const {return ClassInfos.GetContext();} \
+        virtual const char *DebugName() const {return ClassInfos.GetName();} \
+		virtual operator const EbmlId &() const {return ClassInfos.ClassId();} \
+        virtual EbmlElement & CreateElement() const {return Create();} \
+        virtual EbmlElement * Clone() const { return new Type(*this); } \
+		static EbmlElement & Create() {return *(new Type);} \
+        static const EbmlCallbacks & ClassInfo() {return ClassInfos;} \
+        static const EbmlId & ClassId() {return ClassInfos.ClassId();} \
+    private: \
+		static const EbmlCallbacks ClassInfos; \
+
+
+#define EBML_INFO(ref)             ref::ClassInfo()
+#define EBML_ID(ref)               ref::ClassId()
+#define EBML_CLASS_SEMCONTEXT(ref) Context_##ref
+#define EBML_CLASS_CONTEXT(ref)    ref::ClassInfo().GetContext()
+#define EBML_CLASS_CALLBACK(ref)   ref::ClassInfo()
+#define EBML_CONTEXT(e) (e)->Context()
+#define EBML_NAME(e)    (e)->DebugName()
+
+#define EBML_INFO_ID(cb)      (cb).ClassId()
+#define EBML_INFO_NAME(cb)    (cb).GetName()
+#define EBML_INFO_CREATE(cb)  (cb).NewElement()
+#define EBML_INFO_CONTEXT(cb) (cb).GetContext()
+
+#define EBML_SEM_UNIQUE(s)  (s).IsUnique()
+#define EBML_SEM_CONTEXT(s) ((const EbmlCallbacks &)(s)).GetContext()
+#define EBML_SEM_CREATE(s)  (s).Create()
+
+#define EBML_CTX_SIZE(c)       (c).GetSize()
+#define EBML_CTX_MASTER(c)     (c).GetMaster()
+#define EBML_CTX_PARENT(c)     (c).Parent()
+#define EBML_CTX_IDX(c,i)      (c).GetSemantic(i)
+#define EBML_CTX_IDX_INFO(c,i) (const EbmlCallbacks &)((c).GetSemantic(i))
+#define EBML_CTX_IDX_ID(c,i)   ((const EbmlCallbacks &)((c).GetSemantic(i))).ClassId()
+#else
+#define EBML_CONCRETE_CLASS(Type) \
+    public: \
+		virtual const EbmlCallbacks & Generic() const {return ClassInfos;} \
+		virtual operator const EbmlId &() const {return ClassInfos.GlobalId;} \
+        virtual EbmlElement & CreateElement() const {return Create();} \
+        virtual EbmlElement * Clone() const { return new Type(*this); } \
+		static EbmlElement & Create() {return *(new Type);} \
+		static const EbmlCallbacks ClassInfos; \
+
+#define EBML_INFO(ref)             ref::ClassInfos
+#define EBML_ID(ref)               ref::ClassInfos.GlobalId
+#define EBML_CLASS_SEMCONTEXT(ref) Context_##ref
+#define EBML_CLASS_CONTEXT(ref)    ref::ClassInfos.Context
+#define EBML_CLASS_CALLBACK(ref)   ref::ClassInfos
+#define EBML_CONTEXT(e)            (e)->Generic().Context
+#define EBML_NAME(e)               (e)->Generic().DebugName
+
+#define EBML_INFO_ID(cb)      (cb).GlobalId
+#define EBML_INFO_NAME(cb)    (cb).DebugName
+#define EBML_INFO_CREATE(cb)  (cb).Create()
+#define EBML_INFO_CONTEXT(cb) (cb).Context
+
+#define EBML_SEM_UNIQUE(s)  (s).Unique
+#define EBML_SEM_CONTEXT(s) (s).GetCallbacks.Context
+#define EBML_SEM_CREATE(s)  (s).Create()
+
+#define EBML_CTX_SIZE(c)       (c).Size
+#define EBML_CTX_MASTER(c)     (c).MasterElt
+#define EBML_CTX_PARENT(c)     (c).UpTable
+#define EBML_CTX_IDX(c,i)      (c).MyTable[(i)]
+#define EBML_CTX_IDX_INFO(c,i) (c).MyTable[(i)].GetCallbacks
+#define EBML_CTX_IDX_ID(c,i)   (c).MyTable[(i)].GetCallbacks.GlobalId
+#endif
+
+#if !defined(INVALID_FILEPOS_T)
+#define INVALID_FILEPOS_T 0
+#endif
+
+#define EBML_DEF_CONS
+#define EBML_DEF_SEP
+#define EBML_DEF_PARAM
+#define EBML_DEF_BINARY_INIT
+#define EBML_DEF_BINARY_CTX(x)
+#define EBML_DEF_SINTEGER(x)
+#define EBML_DEF_BINARY(x)
+#define EBML_EXTRA_PARAM
+#define EBML_EXTRA_CALL
+#define EBML_EXTRA_DEF
+
 // functions for generic handling of data (should be static to all classes)
 /*!
 	\todo Handle default value
 */
 class EBML_DLL_API EbmlCallbacks {
 	public:
-		EbmlCallbacks(EbmlElement & (*Creator)(), const EbmlId & aGlobalId, const char * aDebugName, const EbmlSemanticContext & aContext)
-			:Create(Creator)
-			,GlobalId(aGlobalId)
-			,DebugName(aDebugName)
-			,Context(aContext)
-		{}
+		EbmlCallbacks(EbmlElement & (*Creator)(), const EbmlId & aGlobalId, const char * aDebugName, const EbmlSemanticContext & aContext);
+
+        inline const EbmlId & ClassId() const { return GlobalId; }
+        inline const EbmlSemanticContext & GetContext() const { return Context; }
+        inline const char * GetName() const { return DebugName; }
+        inline EbmlElement & NewElement() const { return Create(); }
 
+#if defined(EBML_STRICT_API)
+    private:
+#endif
 		EbmlElement & (*Create)();
 		const EbmlId & GlobalId;
 		const char * DebugName;
@@ -108,6 +284,14 @@ class EBML_DLL_API EbmlSemantic {
 		EbmlSemantic(bool aMandatory, bool aUnique, const EbmlCallbacks & aGetCallbacks)
 			:Mandatory(aMandatory), Unique(aUnique), GetCallbacks(aGetCallbacks) {}
 
+        inline bool IsMandatory() const { return Mandatory; }
+        inline bool IsUnique() const { return Unique; }
+        inline EbmlElement & Create() const { return EBML_INFO_CREATE(GetCallbacks); }
+        inline operator const EbmlCallbacks &() const { return GetCallbacks; }
+
+#if defined(EBML_STRICT_API)
+    private:
+#endif
 		bool Mandatory; ///< wether the element is mandatory in the context or not
 		bool Unique;
 		const EbmlCallbacks & GetCallbacks;
@@ -121,13 +305,13 @@ typedef const class EbmlSemanticContext & (*_GetSemanticContext)();
 */
 class EBML_DLL_API EbmlSemanticContext {
 	public:
-		EbmlSemanticContext(unsigned int aSize,
+		EbmlSemanticContext(size_t aSize,
 			const EbmlSemantic *aMyTable,
 			const EbmlSemanticContext *aUpTable,
 			const _GetSemanticContext aGetGlobalContext,
 			const EbmlCallbacks *aMasterElt)
-			:Size(aSize), MyTable(aMyTable), UpTable(aUpTable),
-			 GetGlobalContext(aGetGlobalContext), MasterElt(aMasterElt) {}
+			: GetGlobalContext(aGetGlobalContext), MyTable(aMyTable), Size(aSize),
+			  UpTable(aUpTable), MasterElt(aMasterElt) {}
 
 		bool operator!=(const EbmlSemanticContext & aElt) const {
 			return ((Size != aElt.Size) || (MyTable != aElt.MyTable) ||
@@ -135,12 +319,20 @@ class EBML_DLL_API EbmlSemanticContext {
 				(MasterElt != aElt.MasterElt));
 		}
 
+        inline size_t GetSize() const { return Size; }
+        inline const EbmlCallbacks* GetMaster() const { return MasterElt; }
+        inline const EbmlSemanticContext* Parent() const { return UpTable; }
+        const EbmlSemantic & GetSemantic(size_t i) const;
 
-		unsigned int Size;          ///< number of elements in the table
-		const EbmlSemantic *MyTable; ///< First element in the table
+		const _GetSemanticContext GetGlobalContext; ///< global elements supported at this level
+
+#if defined(EBML_STRICT_API)
+    private:
+#endif
+        const EbmlSemantic *MyTable; ///< First element in the table
+		size_t Size;          ///< number of elements in the table
 		const EbmlSemanticContext *UpTable; ///< Parent element
 		/// \todo replace with the global context directly
-		const _GetSemanticContext GetGlobalContext; ///< global elements supported at this level
 		const EbmlCallbacks *MasterElt;
 };
 
@@ -150,13 +342,13 @@ class EBML_DLL_API EbmlSemanticContext {
 */
 class EBML_DLL_API EbmlElement {
 	public:
-		EbmlElement(const uint64 aDefaultSize, bool bValueSet = false);
-		virtual ~EbmlElement() {assert(!bLocked);}
-	
+		EbmlElement(uint64 aDefaultSize, bool bValueSet = false);
+		virtual ~EbmlElement();
+
 		/// Set the minimum length that will be used to write the element size (-1 = optimal)
-		void SetSizeLength(const int NewSizeLength) {SizeLength = NewSizeLength;}
+		void SetSizeLength(int NewSizeLength) {SizeLength = NewSizeLength;}
 		int GetSizeLength() const {return SizeLength;}
-		
+
 		static EbmlElement * FindNextElement(IOCallback & DataStream, const EbmlSemanticContext & Context, int & UpperLevel, uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel = 1);
 		static EbmlElement * FindNextID(IOCallback & DataStream, const EbmlCallbacks & ClassInfos, const uint64 MaxDataSize);
 
@@ -174,6 +366,14 @@ class EBML_DLL_API EbmlElement {
 		virtual EbmlElement * Clone() const = 0;
 
 		virtual operator const EbmlId &() const = 0;
+#if defined(EBML_STRICT_API)
+        virtual const char *DebugName() const = 0;
+        virtual const EbmlSemanticContext &Context() const = 0;
+#else
+		/// return the generic callback to monitor a derived class
+		virtual const EbmlCallbacks & Generic() const = 0;
+#endif
+        virtual EbmlElement & CreateElement() const = 0;
 
 		// by default only allow to set element as finite (override when needed)
 		virtual bool SetSizeInfinite(bool bIsInfinite = true) {return !bIsInfinite;}
@@ -184,18 +384,15 @@ class EBML_DLL_API EbmlElement {
 			return ElementPosition;
 		}
 
-		uint64 ElementSize(bool bKeepIntact = false) const; /// return the size of the header+data, before writing
-		
-		uint32 Render(IOCallback & output, bool bKeepIntact = false, bool bKeepPosition = false, bool bForceRender = false);
+		uint64 ElementSize(bool bWithDefault = false) const; /// return the size of the header+data, before writing
+
+		filepos_t Render(IOCallback & output, bool bWithDefault = false, bool bKeepPosition = false, bool bForceRender = false);
 
-		virtual uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false) = 0; /// update the Size of the Data stored
-		virtual uint64 GetSize() const {return Size;} /// return the size of the data stored in the element, on reading
+		virtual filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false) = 0; /// update the Size of the Data stored
+		virtual filepos_t GetSize() const {return Size;} /// return the size of the data stored in the element, on reading
 
-		virtual uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA) = 0;
+		virtual filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA) = 0;
 		virtual void Read(EbmlStream & inDataStream, const EbmlSemanticContext & Context, int & UpperEltFound, EbmlElement * & FoundElt, bool AllowDummyElt = false, ScopeMode ReadFully = SCOPE_ALL_DATA);
-		
-		/// return the generic callback to monitor a derived class
-		virtual const EbmlCallbacks & Generic() const = 0;
 
 		bool IsLocked() const {return bLocked;}
 		void Lock(bool bLock = true) { bLocked = bLock;}
@@ -203,31 +400,28 @@ class EBML_DLL_API EbmlElement {
 		/*!
 			\brief default comparison for elements that can't be compared
 		*/
-		virtual bool operator<(const EbmlElement & EltB) const {
-			return true;
-		}
-
+		virtual bool IsSmallerThan(const EbmlElement *Cmp) const;
 		static bool CompareElements(const EbmlElement *A, const EbmlElement *B);
 
 		virtual bool IsDummy() const {return false;}
 		virtual bool IsMaster() const {return false;}
 
 		uint8 HeadSize() const {
-			return EbmlId(*this).Length + CodedSizeLength(Size, SizeLength, bSizeIsFinite);
+			return EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(Size, SizeLength, bSizeIsFinite);
 		} /// return the size of the head, on reading/writing
-		
+
 		/*!
 			\brief Force the size of an element
 			\warning only possible if the size is "undefined"
 		*/
 		bool ForceSize(uint64 NewSize);
 
-		uint32 OverwriteHead(IOCallback & output, bool bKeepPosition = false);
+		filepos_t OverwriteHead(IOCallback & output, bool bKeepPosition = false);
 
 		/*!
 			\brief void the content of the element (replace by EbmlVoid)
 		*/
-		uint32 VoidMe(IOCallback & output, bool bKeepIntact = false);
+		uint32 VoidMe(IOCallback & output, bool bWithDefault = false);
 
 		bool DefaultISset() const {return DefaultIsSet;}
 		virtual bool IsDefaultValue() const = 0;
@@ -236,43 +430,53 @@ class EBML_DLL_API EbmlElement {
 		/*!
 			\brief set the default size of an element
 		*/
-		virtual void SetDefaultSize(const uint64 aDefaultSize) {DefaultSize = aDefaultSize;}
+		virtual void SetDefaultSize(uint64 aDefaultSize) {DefaultSize = aDefaultSize;}
 
 		bool ValueIsSet() const {return bValueIsSet;}
 
 		inline uint64 GetEndPosition() const {
 			return SizePosition + CodedSizeLength(Size, SizeLength, bSizeIsFinite) + Size;
 		}
-		
-	protected:
-		uint64 Size;        ///< the size of the data to write
-		uint64 DefaultSize; ///< Minimum data size to fill on rendering (0 = optimal)
-		int SizeLength; /// the minimum size on which the size will be written (0 = optimal)
-		bool bSizeIsFinite;
-		uint64 ElementPosition;
-		uint64 SizePosition;
-		bool bValueIsSet;
-		bool DefaultIsSet;
-		bool bLocked;
 
+	protected:
 		/*!
 			\brief find any element in the stream
 			\return a DummyRawElement if the element is unknown or NULL if the element dummy is not allowed
 		*/
 		static EbmlElement *CreateElementUsingContext(const EbmlId & aID, const EbmlSemanticContext & Context, int & LowLevel, bool IsGlobalContext, bool bAllowDummy = false, unsigned int MaxLowerLevel = 1);
 
-		uint32 RenderHead(IOCallback & output, bool bForceRender, bool bKeepIntact = false, bool bKeepPosition = false);
-		uint32 MakeRenderHead(IOCallback & output, bool bKeepPosition);
-	
+		filepos_t RenderHead(IOCallback & output, bool bForceRender, bool bWithDefault = false, bool bKeepPosition = false);
+		filepos_t MakeRenderHead(IOCallback & output, bool bKeepPosition);
+
 		/*!
 			\brief prepare the data before writing them (in case it's not already done by default)
 		*/
-		virtual uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false) = 0;
+		virtual filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false) = 0;
 
 		/*!
 			\brief special constructor for cloning
 		*/
 		EbmlElement(const EbmlElement & ElementToClone);
+
+        inline uint64 GetDefaultSize() const {return DefaultSize;}
+        inline void SetSize_(uint64 aSize) {Size = aSize;}
+        inline void SetValueIsSet(bool Set = true) {bValueIsSet = Set;}
+        inline void SetDefaultIsSet(bool Set = true) {DefaultIsSet = Set;}
+        inline void SetSizeIsFinite(bool Set = true) {bSizeIsFinite = Set;}
+        inline uint64 GetSizePosition() const {return SizePosition;}
+
+#if defined(EBML_STRICT_API)
+	private:
+#endif
+		uint64 Size;        ///< the size of the data to write
+		uint64 DefaultSize; ///< Minimum data size to fill on rendering (0 = optimal)
+		int SizeLength; /// the minimum size on which the size will be written (0 = optimal)
+		bool bSizeIsFinite;
+		uint64 ElementPosition;
+		uint64 SizePosition;
+		bool bValueIsSet;
+		bool DefaultIsSet;
+		bool bLocked;
 };
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlEndian.h b/ebml/EbmlEndian.h
index db8824a..7bc9e1b 100644
--- a/ebml/EbmlEndian.h
+++ b/ebml/EbmlEndian.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -30,7 +30,7 @@
 
 /*!
     \file
-    \version \$Id: EbmlEndian.h 1155 2005-05-06 11:43:38Z robux4 $
+    \version \$Id: EbmlEndian.h 1298 2008-02-21 22:14:18Z mosu $
     \author Ingo Ralf Blum   <ingoralfblum @ users.sf.net>
     \author Lasse Kärkkäinen <tronic @ users.sf.net>
     \author Steve Lhomme     <robux4 @ users.sf.net>
@@ -39,6 +39,7 @@
 #define LIBEBML_ENDIAN_H
 
 #include <algorithm>
+#include <cstring>
 
 #include "EbmlConfig.h" // contains _ENDIANESS_
 
@@ -57,61 +58,63 @@ enum endianess {
 template<class TYPE, endianess ENDIAN> class Endian
 {
     public:
-	Endian() {}
+	    Endian() {}
 
-	Endian(const TYPE value)
-	{
-		memcpy(&platform_value, &value, sizeof(TYPE));
-		process_endian();
-	}
+	    Endian(const TYPE value)
+	    {
+		    memcpy(&platform_value, &value, sizeof(TYPE));
+		    process_endian();
+	    }
 
-	inline Endian & Eval(const binary *endian_buffer)
-	{
-	    //endian_value = *(TYPE *)(endian_buffer);
-	    memcpy(&endian_value, endian_buffer, sizeof(TYPE));	// Some (all?) RISC processors do not allow reading objects bigger than 1 byte from non-aligned addresses, and endian_buffer may point to a non-aligned address.
-	    process_platform();
-	    return *this;
-	}
+	    inline Endian & Eval(const binary *endian_buffer)
+	    {
+	        //endian_value = *(TYPE *)(endian_buffer);
+	        memcpy(&endian_value, endian_buffer, sizeof(TYPE));	// Some (all?) RISC processors do not allow reading objects bigger than 1 byte from non-aligned addresses, and endian_buffer may point to a non-aligned address.
+	        process_platform();
+	        return *this;
+	    }
 
-	inline void Fill(binary *endian_buffer) const
-	{
-	    //*(TYPE*)endian_buffer = endian_value;
-	    memcpy(endian_buffer, &endian_value, sizeof(TYPE)); // See above.
-	}
+	    inline void Fill(binary *endian_buffer) const
+	    {
+	        //*(TYPE*)endian_buffer = endian_value;
+	        memcpy(endian_buffer, &endian_value, sizeof(TYPE)); // See above.
+	    }
 
-	inline operator const TYPE&() const { return platform_value; }
-//	inline TYPE endian() const   { return endian_value; }
-	inline const TYPE &endian() const       { return endian_value; }
-	inline size_t size() const   { return sizeof(TYPE); }
-	inline bool operator!=(const binary *buffer) const {return *((TYPE*)buffer) == platform_value;}
+	    inline operator const TYPE&() const { return platform_value; }
+    //	inline TYPE endian() const   { return endian_value; }
+	    inline const TYPE &endian() const       { return endian_value; }
+	    inline size_t size() const   { return sizeof(TYPE); }
+	    inline bool operator!=(const binary *buffer) const {return *((TYPE*)buffer) == platform_value;}
 
+#if defined(EBML_STRICT_API)
+    private:
+#else
     protected:
-	TYPE platform_value;
-	TYPE endian_value;
+#endif
+	    TYPE platform_value;
+	    TYPE endian_value;
 
-	inline void process_endian()
-	{
-	    endian_value = platform_value;
+	    inline void process_endian()
+	    {
+	        endian_value = platform_value;
 #ifdef WORDS_BIGENDIAN
-	    if (ENDIAN == little_endian)
-		std::reverse(reinterpret_cast<uint8*>(&endian_value),reinterpret_cast<uint8*>(&endian_value+1));
+	        if (ENDIAN == little_endian)
 #else  // _ENDIANESS_
-	    if (ENDIAN == big_endian)
-		std::reverse(reinterpret_cast<uint8*>(&endian_value),reinterpret_cast<uint8*>(&endian_value+1));
+	        if (ENDIAN == big_endian)
 #endif // _ENDIANESS_
-	}
+    		    std::reverse(reinterpret_cast<uint8*>(&endian_value),reinterpret_cast<uint8*>(&endian_value+1));
+	    }
 
-	inline void process_platform()
-	{
-	    platform_value = endian_value;
+	    inline void process_platform()
+	    {
+	        platform_value = endian_value;
 #ifdef WORDS_BIGENDIAN
-	    if (ENDIAN == little_endian)
-		std::reverse(reinterpret_cast<uint8*>(&platform_value),reinterpret_cast<uint8*>(&platform_value+1));
+	        if (ENDIAN == little_endian)
 #else  // _ENDIANESS_
-	    if (ENDIAN == big_endian)
-		std::reverse(reinterpret_cast<uint8*>(&platform_value),reinterpret_cast<uint8*>(&platform_value+1));
+	        if (ENDIAN == big_endian)
 #endif // _ENDIANESS_
-	}
+    		    std::reverse(reinterpret_cast<uint8*>(&platform_value),reinterpret_cast<uint8*>(&platform_value+1));
+	    }
 };
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlFloat.h b/ebml/EbmlFloat.h
index 9bfc948..48b6dc9 100644
--- a/ebml/EbmlFloat.h
+++ b/ebml/EbmlFloat.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -56,41 +56,45 @@ class EBML_DLL_API EbmlFloat : public EbmlElement {
 		EbmlFloat(const double DefaultValue, const Precision prec = FLOAT_32);
 		EbmlFloat(const EbmlFloat & ElementToClone);
 
-		bool ValidateSize() const 
+		virtual bool ValidateSize() const 
 		{
-			return (Size == 4 || Size == 8);
+			return (GetSize() == 4 || GetSize() == 8);
 		}
 	
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false);
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
 
 		void SetPrecision(const EbmlFloat::Precision prec = FLOAT_32) 
 		{
 			if (prec == FLOAT_64)
-				Size = 8;
+				SetSize_(8);
 			else
-				Size = 4; // default size
+				SetSize_(4); // default size
 		}
 
 	
 //		EbmlFloat & operator=(const float NewValue) { Value = NewValue; return *this;}
-		EbmlFloat & operator=(const double NewValue) { Value = NewValue; bValueIsSet = true; return *this;}
+		EbmlFloat & operator=(const double NewValue) { Value = NewValue; SetValueIsSet(); return *this;}
 
-		bool operator<(const EbmlFloat & EltCmp) const {return Value < EltCmp.Value;}
+		virtual bool IsSmallerThan(const EbmlElement *Cmp) const;
 		
 		operator const float() const {return float(Value);}
 		operator const double() const {return double(Value);}
 
-		void SetDefaultValue(double aValue) {assert(!DefaultIsSet); DefaultValue = aValue; DefaultIsSet = true;}
+		void SetDefaultValue(double);
     
-		const double DefaultVal() const {assert(DefaultIsSet); return DefaultValue;}
+		const double DefaultVal() const;
 
 		bool IsDefaultValue() const {
 			return (DefaultISset() && Value == DefaultValue);
 		}
 		
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		double Value; /// The actual value of the element
 		double DefaultValue;
 };
diff --git a/ebml/EbmlHead.h b/ebml/EbmlHead.h
index e19f4c1..ab8998c 100644
--- a/ebml/EbmlHead.h
+++ b/ebml/EbmlHead.h
@@ -41,17 +41,11 @@
 
 START_LIBEBML_NAMESPACE
 
-class EBML_DLL_API EbmlHead : public EbmlMaster {
+DECLARE_EBML_MASTER(EbmlHead)
 	public:
-		EbmlHead();
 		EbmlHead(const EbmlHead & ElementToClone) : EbmlMaster(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EbmlHead);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
 
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		bool IsYourId(const EbmlId & TestId) const;
-		EbmlElement * Clone() const {return new EbmlHead(*this);}
+        EBML_CONCRETE_CLASS(EbmlHead)
 };
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlId.h b/ebml/EbmlId.h
index 1ad297c..4e9ee44 100644
--- a/ebml/EbmlId.h
+++ b/ebml/EbmlId.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -40,14 +40,20 @@
 
 START_LIBEBML_NAMESPACE
 
+
+#if defined(EBML_STRICT_API)
+#define EBML_ID_VALUE(id)  (id).GetValue()
+#define EBML_ID_LENGTH(id) (id).GetLength()
+#else
+#define EBML_ID_VALUE(id)  (id).Value
+#define EBML_ID_LENGTH(id) (id).Length
+#endif
+
 /*!
 	\class EbmlId
 */
 class EBML_DLL_API EbmlId {
 	public:
-		uint32 Value;
-		unsigned int Length;
-
 		EbmlId(const binary aValue[4], const unsigned int aLength)
 			:Length(aLength)
 		{
@@ -77,6 +83,15 @@ class EBML_DLL_API EbmlId {
 				Buffer[i] = (Value >> (8*(Length-i-1))) & 0xFF;
 			}
 		}
+
+        inline size_t GetLength() const { return Length; }
+        inline uint32 GetValue() const { return Value; }
+
+#if defined(EBML_STRICT_API)
+    private:
+#endif
+		uint32 Value;
+		size_t Length;
 };
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlMaster.h b/ebml/EbmlMaster.h
index c0b6d6c..328cfc2 100644
--- a/ebml/EbmlMaster.h
+++ b/ebml/EbmlMaster.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -43,6 +43,11 @@
 #include "EbmlElement.h"
 #include "EbmlCrc32.h"
 
+#define EBML_MASTER_ITERATOR  std::vector<EbmlElement *>::iterator
+#define EBML_MASTER_CONST_ITERATOR  std::vector<EbmlElement *>::const_iterator
+#define EBML_MASTER_RITERATOR std::vector<EbmlElement *>::reverse_iterator
+#define EBML_MASTER_CONST_RITERATOR std::vector<EbmlElement *>::const_reverse_iterator
+
 START_LIBEBML_NAMESPACE
 
 const bool bChecksumUsedByDefault = false;
@@ -55,31 +60,31 @@ class EBML_DLL_API EbmlMaster : public EbmlElement {
 	public:
 		EbmlMaster(const EbmlSemanticContext & aContext, bool bSizeIsKnown = true);
 		EbmlMaster(const EbmlMaster & ElementToClone);
-		bool ValidateSize() const {return true;}
+		virtual bool ValidateSize() const {return true;}
 		/*!
 			\warning be carefull to clear the memory allocated in the ElementList elsewhere
 		*/
 		virtual ~EbmlMaster();
 	
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully);
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false);
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully);
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
 		
 		/*!
 			\brief Set wether the size is finite (size is known in advance when writing, or infinite size is not known on writing)
 		*/
-		bool SetSizeInfinite(bool aIsInfinite = true) {bSizeIsFinite = !aIsInfinite; return true;}
+		bool SetSizeInfinite(bool aIsInfinite = true) {SetSizeIsFinite(!aIsInfinite); return true;}
 	
 		bool PushElement(EbmlElement & element);
 		uint64 GetSize() const { 
-			if (bSizeIsFinite)
-				return Size;
+			if (IsFiniteSize())
+                return EbmlElement::GetSize();
 			else
 				return (0-1);
 		}
 		
 		uint64 GetDataStart() const {
-			return ElementPosition + EbmlId(*this).Length + CodedSizeLength(Size, SizeLength, bSizeIsFinite);
+			return GetElementPosition() + EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize());
 		}
 
 		/*!
@@ -89,13 +94,13 @@ class EBML_DLL_API EbmlMaster : public EbmlElement {
 		/*!
 			\brief find the first element corresponding to the ID of the element
 		*/
-		EbmlElement *FindFirstElt(const EbmlCallbacks & Callbacks, const bool bCreateIfNull);
+		EbmlElement *FindFirstElt(const EbmlCallbacks & Callbacks, bool bCreateIfNull);
 		EbmlElement *FindFirstElt(const EbmlCallbacks & Callbacks) const;
 
 		/*!
 			\brief find the element of the same type of PasElt following in the list of elements
 		*/
-		EbmlElement *FindNextElt(const EbmlElement & PastElt, const bool bCreateIfNull);
+		EbmlElement *FindNextElt(const EbmlElement & PastElt, bool bCreateIfNull);
 		EbmlElement *FindNextElt(const EbmlElement & PastElt) const;
 		EbmlElement *AddNewElt(const EbmlCallbacks & Callbacks);
 
@@ -117,6 +122,15 @@ class EBML_DLL_API EbmlMaster : public EbmlElement {
 
 		size_t ListSize() const {return ElementList.size();}
 
+        inline EBML_MASTER_ITERATOR begin() {return ElementList.begin();}
+        inline EBML_MASTER_ITERATOR end() {return ElementList.end();}
+        inline EBML_MASTER_RITERATOR rbegin() {return ElementList.rbegin();}
+        inline EBML_MASTER_RITERATOR rend() {return ElementList.rend();}
+        inline EBML_MASTER_CONST_ITERATOR begin() const {return ElementList.begin();}
+        inline EBML_MASTER_CONST_ITERATOR end() const {return ElementList.end();}
+        inline EBML_MASTER_CONST_RITERATOR rbegin() const {return ElementList.rbegin();}
+        inline EBML_MASTER_CONST_RITERATOR rend() const {return ElementList.rend();}
+
 		EbmlElement * operator[](unsigned int position) {return ElementList[position];}
 		const EbmlElement * operator[](unsigned int position) const {return ElementList[position];}
 
@@ -135,6 +149,8 @@ class EBML_DLL_API EbmlMaster : public EbmlElement {
 			\brief Remove an element from the list of the master
 		*/
 		void Remove(size_t Index);
+		void Remove(EBML_MASTER_ITERATOR & Itr);
+		void Remove(EBML_MASTER_RITERATOR & Itr);
 
 		/*!
 			\brief remove all elements, even the mandatory ones
@@ -145,7 +161,7 @@ class EBML_DLL_API EbmlMaster : public EbmlElement {
 			\brief facility for Master elements to write only the head and force the size later
 			\warning
 		*/
-		uint32 WriteHead(IOCallback & output, int SizeLength, bool bKeepIntact = false);
+		filepos_t WriteHead(IOCallback & output, int SizeLength, bool bWithDefault = false);
 
 		void EnableChecksum(bool bIsEnabled = true) { bChecksumUsed = bIsEnabled; }
 		bool HasChecksum() const {return bChecksumUsed;}
@@ -161,7 +177,11 @@ class EBML_DLL_API EbmlMaster : public EbmlElement {
 		*/
 		std::vector<std::string> FindAllMissingElements();
 
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		std::vector<EbmlElement *> ElementList;
 	
 		const EbmlSemanticContext & Context;
@@ -180,7 +200,7 @@ class EBML_DLL_API EbmlMaster : public EbmlElement {
 template <typename Type>
 Type & GetChild(EbmlMaster & Master)
 {
-	return *(static_cast<Type *>(Master.FindFirstElt(Type::ClassInfos, true)));
+	return *(static_cast<Type *>(Master.FindFirstElt(EBML_INFO(Type), true)));
 }
 // call with
 // MyDocType = GetChild<EDocType>(TestHead);
@@ -188,7 +208,7 @@ Type & GetChild(EbmlMaster & Master)
 template <typename Type>
 Type * FindChild(EbmlMaster & Master)
 {
-	return static_cast<Type *>(Master.FindFirstElt(Type::ClassInfos, false));
+	return static_cast<Type *>(Master.FindFirstElt(EBML_INFO(Type), false));
 }
 
 template <typename Type>
@@ -200,7 +220,7 @@ Type & GetNextChild(EbmlMaster & Master, const Type & PastElt)
 template <typename Type>
 Type & AddNewChild(EbmlMaster & Master)
 {
-	return *(static_cast<Type *>(Master.AddNewElt(Type::ClassInfos)));
+	return *(static_cast<Type *>(Master.AddNewElt(EBML_INFO(Type))));
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlSInteger.h b/ebml/EbmlSInteger.h
index f627aa6..80d5704 100644
--- a/ebml/EbmlSInteger.h
+++ b/ebml/EbmlSInteger.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -11,12 +11,12 @@
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -38,6 +38,8 @@
 #ifndef LIBEBML_SINTEGER_H
 #define LIBEBML_SINTEGER_H
 
+#include <cassert>
+
 #include "EbmlTypes.h"
 #include "EbmlElement.h"
 
@@ -52,37 +54,41 @@ const int DEFAULT_INT_SIZE = 1; ///< optimal size stored
 class EBML_DLL_API EbmlSInteger : public EbmlElement {
 	public:
 		EbmlSInteger();
-		EbmlSInteger(const int64 DefaultValue);
+		EbmlSInteger(int64 DefaultValue);
 		EbmlSInteger(const EbmlSInteger & ElementToClone);
-	
-		EbmlSInteger & operator=(const int64 NewValue) {Value = NewValue; bValueIsSet = true; return *this;}
+
+		EbmlSInteger & operator = (int64 NewValue) {Value = NewValue; SetValueIsSet(); return *this;}
 
 		/*!
 			Set the default size of the integer (usually 1,2,4 or 8)
 		*/
-		void SetDefaultSize(const int nDefaultSize = DEFAULT_INT_SIZE) {Size = nDefaultSize;}
-
-		bool ValidateSize() const {return (Size <= 8);}
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false);
-	
-		bool operator<(const EbmlSInteger & EltCmp) const {return Value < EltCmp.Value;}
-		
+        virtual void SetDefaultSize(uint64 nDefaultSize = DEFAULT_INT_SIZE) {EbmlElement::SetDefaultSize(nDefaultSize); SetSize_(nDefaultSize);}
+
+		virtual bool ValidateSize() const {return (GetSize() <= 8);}
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
+
+		virtual bool IsSmallerThan(const EbmlElement *Cmp) const;
+
 		operator int8() {return  int8(Value);}
 		operator int16() {return int16(Value);}
 		operator int32() {return int32(Value);}
 		operator int64() {return Value;}
 
-		void SetDefaultValue(int64 aValue) {assert(!DefaultIsSet); DefaultValue = aValue; DefaultIsSet = true;}
-    
-		const int64 DefaultVal() const {assert(DefaultIsSet); return DefaultValue;}
+		void SetDefaultValue(int64 aValue) {assert(!DefaultISset()); DefaultValue = aValue; SetDefaultIsSet();}
+
+		int64 DefaultVal() const {assert(DefaultISset()); return DefaultValue;}
 
 		bool IsDefaultValue() const {
 			return (DefaultISset() && Value == DefaultValue);
 		}
 
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		int64 Value; /// The actual value of the element
 		int64 DefaultValue;
 };
diff --git a/ebml/EbmlStream.h b/ebml/EbmlStream.h
index 3f80461..c503d4b 100644
--- a/ebml/EbmlStream.h
+++ b/ebml/EbmlStream.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -61,8 +61,13 @@ class EBML_DLL_API EbmlStream {
 		EbmlElement * FindNextElement(const EbmlSemanticContext & Context, int & UpperLevel, const uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel = 1);
 
 		inline IOCallback & I_O() {return Stream;}
+        operator IOCallback &() {return Stream;}
 
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		IOCallback & Stream;
 };
 
diff --git a/ebml/EbmlString.h b/ebml/EbmlString.h
index 19d9507..d14a356 100644
--- a/ebml/EbmlString.h
+++ b/ebml/EbmlString.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -55,23 +55,27 @@ class EBML_DLL_API EbmlString : public EbmlElement {
 	
 		virtual ~EbmlString() {}
 	
-		bool ValidateSize() const {return true;} // any size is possible
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false);
+		virtual bool ValidateSize() const {return true;} // any size is possible
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
 	
-		EbmlString & operator=(const std::string);
+		EbmlString & operator=(const std::string &);
 		operator const std::string &() const {return Value;}
 	
-		void SetDefaultValue(std::string & aValue) {assert(!DefaultIsSet); DefaultValue = aValue; DefaultIsSet = true;}
+		void SetDefaultValue(std::string &);
     
-		const std::string DefaultVal() const {assert(DefaultIsSet); return DefaultValue;}
+		const std::string & DefaultVal() const;
 
 		bool IsDefaultValue() const {
 			return (DefaultISset() && Value == DefaultValue);
 		}
 
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		std::string Value;  /// The actual value of the element
 		std::string DefaultValue;
 };
diff --git a/ebml/EbmlSubHead.h b/ebml/EbmlSubHead.h
index 070e1bf..2b158bf 100644
--- a/ebml/EbmlSubHead.h
+++ b/ebml/EbmlSubHead.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -43,81 +43,53 @@
 
 START_LIBEBML_NAMESPACE
 
-class EBML_DLL_API EVersion : public EbmlUInteger {
+DECLARE_EBML_UINTEGER(EVersion)
 	public:
-		EVersion() :EbmlUInteger(1) {}
 		EVersion(const EVersion & ElementToClone) : EbmlUInteger(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EVersion);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		EbmlElement * Clone() const {return new EVersion(*this);}
+
+        EBML_CONCRETE_CLASS(EVersion)
 };
 
-class EBML_DLL_API EReadVersion : public EbmlUInteger {
+DECLARE_EBML_UINTEGER(EReadVersion)
 	public:
-		EReadVersion() :EbmlUInteger(1) {}
 		EReadVersion(const EReadVersion & ElementToClone) : EbmlUInteger(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EReadVersion);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		EbmlElement * Clone() const {return new EReadVersion(*this);}
+
+        EBML_CONCRETE_CLASS(EReadVersion)
 };
 
-class EBML_DLL_API EMaxIdLength : public EbmlUInteger {
+DECLARE_EBML_UINTEGER(EMaxIdLength)
 	public:
-		EMaxIdLength() :EbmlUInteger(4) {}
 		EMaxIdLength(const EMaxIdLength & ElementToClone) : EbmlUInteger(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EMaxIdLength);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		EbmlElement * Clone() const {return new EMaxIdLength(*this);}
+
+        EBML_CONCRETE_CLASS(EMaxIdLength)
 };
 
-class EBML_DLL_API EMaxSizeLength : public EbmlUInteger {
+DECLARE_EBML_UINTEGER(EMaxSizeLength)
 	public:
-		EMaxSizeLength() :EbmlUInteger(8) {}
 		EMaxSizeLength(const EMaxSizeLength & ElementToClone) : EbmlUInteger(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EMaxSizeLength);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		EbmlElement * Clone() const {return new EMaxSizeLength(*this);}
+
+        EBML_CONCRETE_CLASS(EMaxSizeLength)
 };
 
-class EBML_DLL_API EDocType : public EbmlString {
+DECLARE_EBML_STRING(EDocType)
 	public:
-		EDocType() {}
 		EDocType(const EDocType & ElementToClone) : EbmlString(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EDocType);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		EbmlElement * Clone() const {return new EDocType(*this);}
+
+        EBML_CONCRETE_CLASS(EDocType)
 };
 
-class EBML_DLL_API EDocTypeVersion : public EbmlUInteger {
+DECLARE_EBML_UINTEGER(EDocTypeVersion)
 	public:
-		EDocTypeVersion() {}
 		EDocTypeVersion(const EDocTypeVersion & ElementToClone) : EbmlUInteger(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EDocTypeVersion);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		EbmlElement * Clone() const {return new EDocTypeVersion(*this);}
+
+        EBML_CONCRETE_CLASS(EDocTypeVersion)
 };
 
-class EBML_DLL_API EDocTypeReadVersion : public EbmlUInteger {
+DECLARE_EBML_UINTEGER(EDocTypeReadVersion)
 	public:
-		EDocTypeReadVersion() {}
 		EDocTypeReadVersion(const EDocTypeReadVersion & ElementToClone) : EbmlUInteger(ElementToClone) {}
-		static EbmlElement & Create() {return *(new EDocTypeReadVersion);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		static const EbmlCallbacks ClassInfos;
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		EbmlElement * Clone() const {return new EDocTypeReadVersion(*this);}
+
+        EBML_CONCRETE_CLASS(EDocTypeReadVersion)
 };
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/EbmlTypes.h b/ebml/EbmlTypes.h
index 6194dec..01fe0fd 100644
--- a/ebml/EbmlTypes.h
+++ b/ebml/EbmlTypes.h
@@ -33,9 +33,6 @@
 #ifndef LIBEBML_TYPES_H
 #define LIBEBML_TYPES_H
 
-#include <clocale>
-#include <string>
-
 #include "ebml/c/libebml_t.h"
 #include "ebml/EbmlConfig.h"
 #include "EbmlEndian.h" // binary needs to be defined
diff --git a/ebml/EbmlUInteger.h b/ebml/EbmlUInteger.h
index 2008a92..eacc623 100644
--- a/ebml/EbmlUInteger.h
+++ b/ebml/EbmlUInteger.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -52,37 +52,41 @@ const int DEFAULT_UINT_SIZE = 0; ///< optimal size stored
 class EBML_DLL_API EbmlUInteger : public EbmlElement {
 	public:
 		EbmlUInteger();
-		EbmlUInteger(const uint64 DefaultValue);
+		EbmlUInteger(uint64 DefaultValue);
 		EbmlUInteger(const EbmlUInteger & ElementToClone);
 	
-		EbmlUInteger & operator=(const uint64 NewValue) {Value = NewValue; bValueIsSet = true; return *this;}
+		EbmlUInteger & operator=(uint64 NewValue) {Value = NewValue; SetValueIsSet(); return *this;}
 
 		/*!
 			Set the default size of the integer (usually 1,2,4 or 8)
 		*/
-		void SetDefaultSize(const int nDefaultSize = DEFAULT_UINT_SIZE) {Size = nDefaultSize;}
+		virtual void SetDefaultSize(uint64 nDefaultSize = DEFAULT_UINT_SIZE) {EbmlElement::SetDefaultSize(nDefaultSize); SetSize_(nDefaultSize);}
 
-		bool ValidateSize() const {return (Size <= 8);}
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false);
+		virtual bool ValidateSize() const {return (GetSize() <= 8);}
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
 		
-		bool operator<(const EbmlUInteger & EltCmp) const {return Value < EltCmp.Value;}
+		virtual bool IsSmallerThan(const EbmlElement *Cmp) const;
 		
 		operator uint8()  const {return uint8(Value); }
 		operator uint16() const {return uint16(Value);}
 		operator uint32() const {return uint32(Value);}
 		operator uint64() const {return Value;}
 
-		void SetDefaultValue(uint64 aValue) {assert(!DefaultIsSet); DefaultValue = aValue; DefaultIsSet = true;}
+		void SetDefaultValue(uint64);
     
-		const uint64 DefaultVal() const {assert(DefaultIsSet); return DefaultValue;}
+		const uint64 DefaultVal() const;
 
 		bool IsDefaultValue() const {
 			return (DefaultISset() && Value == DefaultValue);
 		}
 
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		uint64 Value; /// The actual value of the element
 		uint64 DefaultValue;
 };
diff --git a/ebml/EbmlUnicodeString.h b/ebml/EbmlUnicodeString.h
index ee8279f..024bafa 100644
--- a/ebml/EbmlUnicodeString.h
+++ b/ebml/EbmlUnicodeString.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -77,7 +77,11 @@ public:
 	const std::string & GetUTF8() const {return UTF8string;}
 	void SetUTF8(const std::string &);
 
-protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 	size_t _Length; ///< length of the UCS string excluding the \0
 	wchar_t* _Data; ///< internal UCS representation	
 	std::string UTF8string;
@@ -100,23 +104,27 @@ class EBML_DLL_API EbmlUnicodeString : public EbmlElement {
 	
 		virtual ~EbmlUnicodeString() {}
 	
-		bool ValidateSize() const {return true;} // any size is possible
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
-		uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
-		uint64 UpdateSize(bool bKeepIntact = false, bool bForceRender = false);
+		virtual bool ValidateSize() const {return true;} // any size is possible
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
+		filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+		filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
 	
 		EbmlUnicodeString & operator=(const UTFstring &); ///< platform dependant code
 		operator const UTFstring &() const {return Value;}
 	
-		void SetDefaultValue(UTFstring & aValue) {assert(!DefaultIsSet); DefaultValue = aValue; DefaultIsSet = true;}
+		void SetDefaultValue(UTFstring &);
     
-		UTFstring DefaultVal() const {assert(DefaultIsSet); return DefaultValue;}
+		const UTFstring & DefaultVal() const;
 
 		bool IsDefaultValue() const {
 			return (DefaultISset() && Value == DefaultValue);
 		}
 
-	protected:
+#if defined(EBML_STRICT_API)
+    private:
+#else
+    protected:
+#endif
 		UTFstring Value; /// The actual value of the element
 		UTFstring DefaultValue;
 };
diff --git a/ebml/EbmlVersion.h b/ebml/EbmlVersion.h
index 09fd176..a080368 100644
--- a/ebml/EbmlVersion.h
+++ b/ebml/EbmlVersion.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -30,7 +30,7 @@
 
 /*!
 	\file
-	\version \$Id: EbmlVersion.h 1245 2006-03-31 12:33:02Z mosu $
+	\version \$Id: EbmlVersion.h 1326 2009-08-23 00:47:52Z robux4 $
 	\author Steve Lhomme     <robux4 @ users.sf.net>
 */
 #ifndef LIBEBML_VERSION_H
@@ -42,9 +42,9 @@
 
 START_LIBEBML_NAMESPACE
 
-#define LIBEBML_VERSION 0x000707
+#define LIBEBML_VERSION 0x000800
 
-static const std::string EbmlCodeVersion = "0.7.7";
+static const std::string EbmlCodeVersion = "0.8.0";
 static const std::string EbmlCodeDate    = __TIMESTAMP__;
 
 /*!
diff --git a/ebml/EbmlVoid.h b/ebml/EbmlVoid.h
index 125c65a..1370284 100644
--- a/ebml/EbmlVoid.h
+++ b/ebml/EbmlVoid.h
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -41,39 +41,31 @@
 
 START_LIBEBML_NAMESPACE
 
-class EBML_DLL_API EbmlVoid : public EbmlBinary {
+DECLARE_EBML_BINARY(EbmlVoid)
 	public:
-		EbmlVoid();
 		EbmlVoid(const EbmlVoid & ElementToClone) :EbmlBinary(ElementToClone){}
-		static EbmlElement & Create() {return *(new EbmlVoid);}
-		const EbmlCallbacks & Generic() const {return ClassInfos;}
-		bool ValidateSize() const {return true;} // any void element is accepted
-		static const EbmlCallbacks ClassInfos;
-
-		operator const EbmlId &() const {return ClassInfos.GlobalId;}
-		bool IsYourId(const EbmlId & TestId) const;
 
 		/*!
 			\brief Set the size of the data (not the complete size of the element)
 		*/
-		void SetSize(uint64 aSize) {Size = aSize;}
+		void SetSize(uint64 aSize) {SetSize_(aSize);}
 
 		/*!
 			\note overwrite to write fake data 
 		*/
-		uint32 RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact = false);
+		filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
 
 		/*!
 			\brief Replace the void element content (written) with this one
 		*/
-		uint64 ReplaceWith(EbmlElement & EltToReplaceWith, IOCallback & output, bool ComeBackAfterward = true, bool bKeepIntact = false);
+		uint64 ReplaceWith(EbmlElement & EltToReplaceWith, IOCallback & output, bool ComeBackAfterward = true, bool bWithDefault = false);
 
 		/*!
 			\brief Void the content of an element
 		*/
-		uint64 Overwrite(const EbmlElement & EltToVoid, IOCallback & output, bool ComeBackAfterward = true, bool bKeepIntact = false);
+		uint64 Overwrite(const EbmlElement & EltToVoid, IOCallback & output, bool ComeBackAfterward = true, bool bWithDefault = false);
 
-		EbmlElement * Clone() const {return new EbmlVoid(*this);}
+        EBML_CONCRETE_CLASS(EbmlVoid)
 };
 
 END_LIBEBML_NAMESPACE
diff --git a/ebml/IOCallback.h b/ebml/IOCallback.h
index 50a7421..5a5ecd8 100644
--- a/ebml/IOCallback.h
+++ b/ebml/IOCallback.h
@@ -9,12 +9,12 @@
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -35,6 +35,7 @@
 
 #include "EbmlTypes.h"
 
+#include <cassert>
 #include <exception>
 #include <cstdio>
 // #include <iostream>
diff --git a/ebml/MemIOCallback.h b/ebml/MemIOCallback.h
index 3530ea0..48fed9b 100644
--- a/ebml/MemIOCallback.h
+++ b/ebml/MemIOCallback.h
@@ -28,7 +28,7 @@
 
 /*!
 	\file
-	\version \$Id: MemIOCallback.h 639 2004-07-09 20:59:14Z mosu $
+	\version \$Id: MemIOCallback.h 1298 2008-02-21 22:14:18Z mosu $
 	\author Jory Stone <jcsston @ toughguy.net>
 */
 #ifndef LIBEBML_MEMIOCALLBACK_H
@@ -36,10 +36,6 @@
 
 #include "IOCallback.h"
 #include <string>
-// Several gcc versions have some header problem, others don't -
-// but those that do will have problems with min being defined as a
-// macro upon inclusion of some stream header.
-#undef min
 #ifndef __BEOS__
 #include <sstream>
 #else
diff --git a/ebml/c/libebml_t.h b/ebml/c/libebml_t.h
index 2aa3ae8..fa25f0a 100644
--- a/ebml/c/libebml_t.h
+++ b/ebml/c/libebml_t.h
@@ -11,12 +11,12 @@
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -30,11 +30,11 @@
 
 /*!
     \file libebml_t.h
-    \version \$Id: libebml_t.h 1011 2005-01-05 16:15:25Z robux4 $
+    \version \$Id: libebml_t.h 1298 2008-02-21 22:14:18Z mosu $
     \author Steve Lhomme     <robux4 @ users.sf.net>
     \author Ingo Ralf Blum   <ingoralfblum @ users.sf.net>
     \author Moritz Bunkus <moritz at bunkus.org>
-    
+
     \brief Misc type definitions for the C API of LIBEBML
 
     \note These types should be compiler/language independant (just platform dependant)
@@ -89,18 +89,19 @@ extern "C" {
 # ifdef _NO_LONGLONG
 #  error This compiler does not support 64bit integers.
 # endif
-    typedef long long int64; // int64_t is not always defined :(
+    typedef int64_t int64;
     typedef int32_t int32;
     typedef int16_t int16;
     typedef int8_t int8;
     typedef int8_t character;
-    typedef unsigned long long uint64; // uint64_t is not always defined :(
+    typedef uint64_t uint64;
     typedef uint32_t uint32;
     typedef uint16_t uint16;
     typedef uint8_t uint8;
 #elif defined(__BEOS__)
 # include <support/SupportDefs.h>
 #else // anything else (Linux, BSD, ...)
+# include <inttypes.h>
 # include <sys/types.h>
     typedef int64_t int64;
     typedef int32_t int32;
@@ -114,7 +115,7 @@ extern "C" {
 #endif /* anything else */
 
 typedef uint8  binary;
-
+typedef uint64 filepos_t;
 
 typedef enum open_mode {
     MODE_READ,
@@ -123,9 +124,7 @@ typedef enum open_mode {
     MODE_SAFE
 } open_mode;
 
-#if !defined(min)
-#define min(x,y) ((x)<(y) ? (x) : (y))
-#endif
+#define EBML_MIN(x,y) ((x)<(y) ? (x) : (y))
 
 #ifdef __cplusplus
 }
diff --git a/libebml.proj b/libebml.proj
new file mode 100644
index 0000000..17d9f19
--- /dev/null
+++ b/libebml.proj
@@ -0,0 +1,67 @@
+Include "*/*.proj"
+
+LIB ebml
+{
+  PROJECT_VERSION 0.7.9
+
+  INCLUDE .
+  EXPINCLUDE .
+  EXPDEFINE(USE_EBML_STRICT_API) EBML_STRICT_API
+  DEFINE(USE_EBML_STRICT_API) EBML_STRICT_API
+
+//  OPTIMIZE_GLOBALLY .
+  FAVOR_MAX_SPEED .
+  REDUCE_SIZE .
+  FASTER_FLOAT .
+  
+//  SOURCE src/Debug.cpp
+  SOURCE src/EbmlBinary.cpp
+  SOURCE src/EbmlContexts.cpp
+  SOURCE src/EbmlCrc32.cpp
+  SOURCE src/EbmlDate.cpp
+  SOURCE src/EbmlDummy.cpp
+  SOURCE src/EbmlElement.cpp
+  SOURCE src/EbmlFloat.cpp
+  SOURCE src/EbmlHead.cpp
+  SOURCE src/EbmlMaster.cpp
+  SOURCE src/EbmlSInteger.cpp
+  SOURCE src/EbmlStream.cpp
+  SOURCE src/EbmlString.cpp
+  SOURCE src/EbmlSubHead.cpp
+  SOURCE src/EbmlUInteger.cpp
+  SOURCE src/EbmlUnicodeString.cpp
+  SOURCE src/EbmlVersion.cpp
+  SOURCE src/EbmlVoid.cpp
+  SOURCE src/IOCallback.cpp
+  SOURCE src/MemIOCallback.cpp
+  SOURCE src/StdIOCallback.cpp
+  SOURCE(TARGET_WIN) src/platform/win32/WinIOCallback.cpp
+
+  HEADER(TARGET_WIN) src/platform/win32/WinIOCallback.h
+//  HEADER ebml/Debug.h
+  HEADER ebml/EbmlBinary.h
+  HEADER ebml/EbmlConfig.h
+  HEADER ebml/EbmlContexts.h
+  HEADER ebml/EbmlCrc32.h
+  HEADER ebml/EbmlDate.h
+  HEADER ebml/EbmlDummy.h
+  HEADER ebml/EbmlElement.h
+  HEADER ebml/EbmlEndian.h
+  HEADER ebml/EbmlFloat.h
+  HEADER ebml/EbmlHead.h
+  HEADER ebml/EbmlId.h
+  HEADER ebml/EbmlMaster.h
+  HEADER ebml/EbmlSInteger.h
+  HEADER ebml/EbmlStream.h
+  HEADER ebml/EbmlString.h
+  HEADER ebml/EbmlSubHead.h
+  HEADER ebml/EbmlTypes.h
+  HEADER ebml/EbmlUInteger.h
+  HEADER ebml/EbmlUnicodeString.h
+  HEADER ebml/EbmlVersion.h
+  HEADER ebml/EbmlVoid.h
+  HEADER ebml/IOCallback.h
+  HEADER ebml/MemIOCallback.h
+  HEADER ebml/StdIOCallback.h
+  HEADER ebml/c/libebml_t.h
+}
diff --git a/make/linux/Makefile b/make/linux/Makefile
index 7539c86..82ab439 100644
--- a/make/linux/Makefile
+++ b/make/linux/Makefile
@@ -1,152 +1,149 @@
-# libebml Makefile
-# $Id: Makefile,v 1.8 2004/05/11 20:27:38 mosu Exp $
-# Author: Steve Lhomme <robux4 @ users.sf.net>
-# Author: Moritz Bunkus <moritz @ bunkus.org>
-
-#
-# The library is built without debug information. If you want
-# debug information to be included then compile with
-# 'make DEBUG=yes'.
-#
-
-# Paths
-# BeOS wants the libs and headers in /boot/home/config
-ifeq (BeOS,$(shell uname -s))
-prefix=/boot/home/config
-else
-prefix=/usr/local
-endif
-libdir=$(prefix)/lib
-includedir=$(prefix)/include/ebml
-
-# Programs
-CXX=g++
-LD=$(CXX)
-AR = ar rcvu
-RANLIB = ranlib
-INSTALL = install
-INSTALL_OPTS = -m 644
-INSTALL_OPTS_LIB = -m 644
-INSTALL_DIR_OPTS = -m 755
-
-# Options
-EXTENSION=.cpp
-
-ifeq (yes,$(DEBUG))
-DEBUGFLAGS=-g -DDEBUG
-endif
-
-ifneq (,$(shell $(CXX) -v 2>&1 | tail -n 1 | grep -i mingw))
-$(error Please use the Makefile in ../mingw32)
-endif
-
-CWD=$(shell pwd)
-
-SRC_DIR=$(CWD)/../../src/
-INCLUDE_DIR=$(CWD)/../../ebml
-
-# Librarires
-INCLUDE=-I$(CWD)/../..
-LIBS=
-
-# Names
-LIBRARY=libebml.a
-LIBRARY_SO=libebml.so
-LIBRARY_SO_VER=libebml.so.0
-
-# source-files
-sources:=$(wildcard ${SRC_DIR}*$(EXTENSION))
-
-# header files; replace .cxx extension with .h
-headers:=$(patsubst %$(EXTENSION),%.h,$(sources))
-
-# object files; replace .cxx extension with .o
-objects:=$(patsubst %$(EXTENSION),%.o,$(sources))
-objects_so:=$(patsubst %$(EXTENSION),%.lo,$(sources))
-
-WARNINGFLAGS=-Wall -Wno-unknown-pragmas -ansi -fno-gnu-keywords -Wshadow
-COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
-DEPENDFLAGS  = $(CXXFLAGS) $(INCLUDE)
-
-ifeq (Darwin,$(shell uname -s))
-all: staticlib
-else
-all: staticlib sharedlib
-endif
-
-staticlib: $(LIBRARY)
-
-sharedlib: $(LIBRARY_SO)
-
-lib:
-	@echo "Use the 'staticlib', 'sharedlib' or 'all' targets."
-	@false
-
-# Build rules
-%.o: %$(EXTENSION)
-	$(CXX) -c $(COMPILEFLAGS) -o $@ $<
-
-%.lo: %$(EXTENSION)
-	$(CXX) -c $(COMPILEFLAGS) -fPIC -o $@ $<
-
-$(LIBRARY): $(objects)
-	$(AR) $@ $(objects)
-	$(RANLIB) $@
-
-$(LIBRARY_SO): $(objects_so)
-	$(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
-	rm -f $(LIBRARY_SO)
-	ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
-
-clean:
-	rm -f $(objects) $(objects_so)
-	rm -f $(LIBRARY)
-	rm -f $(LIBRARY_SO)
-	rm -f $(LIBRARY_SO_VER)
-	rm -f CORE
-
-distclean dist-clean: clean
-	rm -f .depend
-
-depend:
-	@echo Calculating dependecies:
-	@rm -f .depend
-	@touch .depend
-	@for i in $(sources); do \
-		o="`echo $$i | sed -e 's/\.c$$/.o/' -e 's/\.cpp$$/.o/'`" ; \
-		echo '  ' $$i: $$o ; \
-		$(CXX) $(DEPENDFLAGS) -MM -MT $$o $$i >> .depend ; \
-	done
-
-ifeq (Darwin,$(shell uname -s))
-install: install_staticlib install_headers
-else
-install: install_staticlib install_sharedlib install_headers
-endif
-
-install_headers:
-	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(includedir)
-	for i in $(INCLUDE_DIR)/*.h; do \
-		$(INSTALL) $(INSTALL_OPTS) $$i $(includedir) ; \
-	done
-	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(includedir)/c
-	for i in $(INCLUDE_DIR)/c/*.h; do \
-		$(INSTALL) $(INSTALL_OPTS) $$i $(includedir)/c ; \
-	done
-
-install_staticlib: $(LIBRARY)
-	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(libdir)
-	$(INSTALL) $(INSTALL_OPTS_LIB) $(LIBRARY) $(libdir)
-
-install_sharedlib: $(LIBRARY_SO)
-	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(libdir)
-	$(INSTALL) $(INSTALL_OPTS_LIB) $(LIBRARY_SO_VER) $(libdir)
-	ln -s $(LIBRARY_SO_VER) $(libdir)/$(LIBRARY_SO)
-
-
-ifneq ($(wildcard .depend),)
-include .depend
-endif
-
-# DO NOT DELETE
-
+# libebml Makefile
+# $Id: Makefile,v 1.8 2004/05/11 20:27:38 mosu Exp $
+# Author: Steve Lhomme <robux4 @ users.sf.net>
+# Author: Moritz Bunkus <moritz @ bunkus.org>
+
+#
+# The library is built without debug information. If you want
+# debug information to be included then compile with
+# 'make DEBUG=yes'.
+#
+
+# Paths
+# BeOS wants the libs and headers in /boot/home/config
+ifeq (BeOS,$(shell uname -s))
+prefix=/boot/home/config
+else
+prefix=/usr/local
+endif
+libdir=$(prefix)/lib
+includedir=$(prefix)/include/ebml
+
+# Programs
+CROSS =
+CXX = $(CROSS)g++
+LD = $(CXX)
+AR = $(CROSS)ar
+RANLIB = $(CROSS)ranlib
+INSTALL = install
+INSTALL_OPTS = -m 644
+INSTALL_OPTS_LIB = -m 644
+INSTALL_DIR_OPTS = -m 755
+
+# Options
+EXTENSION=.cpp
+
+ifeq (yes,$(DEBUG))
+DEBUGFLAGS=-g -DDEBUG
+endif
+
+CWD=$(shell pwd)
+
+SRC_DIR=$(CWD)/../../src/
+INCLUDE_DIR=$(CWD)/../../ebml
+
+# Librarires
+INCLUDE=-I$(CWD)/../..
+LIBS=
+
+# Names
+LIBRARY=libebml.a
+LIBRARY_SO=libebml.so
+LIBRARY_SO_VER=libebml.so.0
+
+# source-files
+sources:=$(wildcard ${SRC_DIR}*$(EXTENSION))
+
+# header files; replace .cxx extension with .h
+headers:=$(patsubst %$(EXTENSION),%.h,$(sources))
+
+# object files; replace .cxx extension with .o
+objects:=$(patsubst %$(EXTENSION),%.o,$(sources))
+objects_so:=$(patsubst %$(EXTENSION),%.lo,$(sources))
+
+WARNINGFLAGS=-Wall -Wno-unknown-pragmas -ansi -fno-gnu-keywords -Wshadow
+COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
+DEPENDFLAGS  = $(CXXFLAGS) $(INCLUDE)
+
+ifeq (Darwin,$(shell uname -s))
+all: staticlib
+else
+all: staticlib sharedlib
+endif
+
+staticlib: $(LIBRARY)
+
+sharedlib: $(LIBRARY_SO)
+
+lib:
+	@echo "Use the 'staticlib', 'sharedlib' or 'all' targets."
+	@false
+
+# Build rules
+%.o: %$(EXTENSION)
+	$(CXX) -c $(COMPILEFLAGS) -o $@ $<
+
+%.lo: %$(EXTENSION)
+	$(CXX) -c $(COMPILEFLAGS) -fPIC -o $@ $<
+
+$(LIBRARY): $(objects)
+	$(AR) rcvu $@ $(objects)
+	$(RANLIB) $@
+
+$(LIBRARY_SO): $(objects_so)
+	$(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
+	rm -f $(LIBRARY_SO)
+	ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
+
+clean:
+	rm -f $(objects) $(objects_so)
+	rm -f $(LIBRARY)
+	rm -f $(LIBRARY_SO)
+	rm -f $(LIBRARY_SO_VER)
+	rm -f CORE
+
+distclean dist-clean: clean
+	rm -f .depend
+
+depend:
+	@echo Calculating dependecies:
+	@rm -f .depend
+	@touch .depend
+	@for i in $(sources); do \
+		o="`echo $$i | sed -e 's/\.c$$/.o/' -e 's/\.cpp$$/.o/'`" ; \
+		echo '  ' $$i: $$o ; \
+		$(CXX) $(DEPENDFLAGS) -MM -MT $$o $$i >> .depend ; \
+	done
+
+ifeq (Darwin,$(shell uname -s))
+install: install_staticlib install_headers
+else
+install: install_staticlib install_sharedlib install_headers
+endif
+
+install_headers:
+	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(includedir)
+	for i in $(INCLUDE_DIR)/*.h; do \
+		$(INSTALL) $(INSTALL_OPTS) $$i $(includedir) ; \
+	done
+	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(includedir)/c
+	for i in $(INCLUDE_DIR)/c/*.h; do \
+		$(INSTALL) $(INSTALL_OPTS) $$i $(includedir)/c ; \
+	done
+
+install_staticlib: $(LIBRARY)
+	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(libdir)
+	$(INSTALL) $(INSTALL_OPTS_LIB) $(LIBRARY) $(libdir)
+
+install_sharedlib: $(LIBRARY_SO)
+	$(INSTALL) $(INSTALL_DIR_OPTS) -d $(libdir)
+	$(INSTALL) $(INSTALL_OPTS_LIB) $(LIBRARY_SO_VER) $(libdir)
+	ln -fs $(LIBRARY_SO_VER) $(libdir)/$(LIBRARY_SO)
+
+
+ifneq ($(wildcard .depend),)
+include .depend
+endif
+
+# DO NOT DELETE
+
diff --git a/make/linux/fedora-core.spec b/make/linux/fedora-core.spec
index d65a0f3..e68dc2b 100644
--- a/make/linux/fedora-core.spec
+++ b/make/linux/fedora-core.spec
@@ -1,67 +1,67 @@
-# SPEC file for libebml on (at least) Fedora Core 1, 2, 3
-
-Name: 		libebml
-Version: 0.7.5
-Release: 1
-License: 	LGPL
-Summary:	Extensible Binary Meta Language
-Group:		System Environment/Libraries
-URL: 		http://ebml.sourceforge.net/
-Vendor:         Moritz Bunkus <moritz at bunkus.org>
-Source:		http://dl.matroska.org/downloads/%{name}/%{name}-%{version}.tar.bz2
-BuildRoot: 	%{_tmppath}/%{name}-root
-
-%description
-EBML was designed to be a simplified binary extension of XML for
-the purpose of storing and manipulating data in a hierarchical
-form with variable field lengths.
-It uses the same paradigms as XML files, ie syntax and semantic
-are separated. So a generic EBML library could read any format
-based on it. The interpretation of data is up to a specific
-application that knows how each elements (equivalent of XML tag)
-has to be handled.
-
-%package devel
-Summary:	Extensible Binary Meta Language headers/development files
-Group:		Development/Libraries
-
-%description devel
-EBML was designed to be a simplified binary extension of XML for
-the purpose of storing and manipulating data in a hierarchical
-form with variable field lengths.
-It uses the same paradigms as XML files, ie syntax and semantic
-are separated. So a generic EBML library could read any format
-based on it. The interpretation of data is up to a specific
-application that knows how each elements (equivalent of XML tag)
-has to be handled.
-
-%prep
-%setup -q
-
-%build
-cd make/linux
-CFLAGS="$RPM_OPT_FLAGS" \
-make \
-prefix="%{_prefix}" staticlib
-cd ../..
-
-%install
-[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-cd make/linux
-make prefix=$RPM_BUILD_ROOT/%{_prefix} install_staticlib install_headers
-cd ../..
-
-%clean
-[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-
-%files devel
-%defattr(-, root, root)
-%{_includedir}/ebml/*.h
-%{_includedir}/ebml/c/*.h
-%{_libdir}/libebml.a
-
-%changelog
-* Sat Apr 16 2005 Moritz Bunkus <moritz at bunkus.org>
-- updated for the new libebml build targets
-* Fri May 15 2003 Ronald Bultje <rbultje at ronald.bitfreak.net>
-- create spec file
+# SPEC file for libebml on (at least) Fedora Core 1, 2, 3
+
+Name: 		libebml
+Version: 0.7.5
+Release: 1
+License: 	LGPL
+Summary:	Extensible Binary Meta Language
+Group:		System Environment/Libraries
+URL: 		http://ebml.sourceforge.net/
+Vendor:         Moritz Bunkus <moritz at bunkus.org>
+Source:		http://dl.matroska.org/downloads/%{name}/%{name}-%{version}.tar.bz2
+BuildRoot: 	%{_tmppath}/%{name}-root
+
+%description
+EBML was designed to be a simplified binary extension of XML for
+the purpose of storing and manipulating data in a hierarchical
+form with variable field lengths.
+It uses the same paradigms as XML files, ie syntax and semantic
+are separated. So a generic EBML library could read any format
+based on it. The interpretation of data is up to a specific
+application that knows how each elements (equivalent of XML tag)
+has to be handled.
+
+%package devel
+Summary:	Extensible Binary Meta Language headers/development files
+Group:		Development/Libraries
+
+%description devel
+EBML was designed to be a simplified binary extension of XML for
+the purpose of storing and manipulating data in a hierarchical
+form with variable field lengths.
+It uses the same paradigms as XML files, ie syntax and semantic
+are separated. So a generic EBML library could read any format
+based on it. The interpretation of data is up to a specific
+application that knows how each elements (equivalent of XML tag)
+has to be handled.
+
+%prep
+%setup -q
+
+%build
+cd make/linux
+CFLAGS="$RPM_OPT_FLAGS" \
+make \
+prefix="%{_prefix}" staticlib
+cd ../..
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+cd make/linux
+make prefix=$RPM_BUILD_ROOT/%{_prefix} install_staticlib install_headers
+cd ../..
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%files devel
+%defattr(-, root, root)
+%{_includedir}/ebml/*.h
+%{_includedir}/ebml/c/*.h
+%{_libdir}/libebml.a
+
+%changelog
+* Sat Apr 16 2005 Moritz Bunkus <moritz at bunkus.org>
+- updated for the new libebml build targets
+* Fri May 15 2003 Ronald Bultje <rbultje at ronald.bitfreak.net>
+- create spec file
diff --git a/make/linux/suse-libebml-makefile.diff b/make/linux/suse-libebml-makefile.diff
index 9efa710..0977482 100644
--- a/make/linux/suse-libebml-makefile.diff
+++ b/make/linux/suse-libebml-makefile.diff
@@ -1,14 +1,14 @@
---- libebml-0.7.1/make/linux/Makefile~	2004-09-01 22:24:12.520218192 +0200
-+++ libebml-0.7.1/make/linux/Makefile	2004-09-01 22:25:30.976291056 +0200
-@@ -14,9 +14,9 @@
- ifeq (BeOS,$(shell uname -s))
- prefix=/boot/home/config
- else
--prefix=/usr/local
-+prefix=$(PREFIX)
- endif
--libdir=$(prefix)/lib
-+libdir=$(LIBDIR)
- includedir=$(prefix)/include/ebml
- 
- # Programs
+--- libebml-0.7.1/make/linux/Makefile~	2004-09-01 22:24:12.520218192 +0200
++++ libebml-0.7.1/make/linux/Makefile	2004-09-01 22:25:30.976291056 +0200
+@@ -14,9 +14,9 @@
+ ifeq (BeOS,$(shell uname -s))
+ prefix=/boot/home/config
+ else
+-prefix=/usr/local
++prefix=$(PREFIX)
+ endif
+-libdir=$(prefix)/lib
++libdir=$(LIBDIR)
+ includedir=$(prefix)/include/ebml
+ 
+ # Programs
diff --git a/make/linux/suse.spec b/make/linux/suse.spec
index 73eb150..b9cd8e8 100644
--- a/make/linux/suse.spec
+++ b/make/linux/suse.spec
@@ -1,71 +1,71 @@
-#
-# spec file for package libebml for (at least) SuSE Linux 9.0, 9.1
-#
-# Copyright (c) 2004 SUSE LINUX AG, Nuernberg, Germany.
-# This file and all modifications and additions to the pristine
-# package are under the same license as the package itself.
-#
-# Please submit bugfixes or comments via http://www.suse.de/feedback/
-#
-
-# neededforbuild  gcc-c++ libstdc++-devel
-
-BuildRequires: aaa_base acl attr bash bind-utils bison bzip2 coreutils cpio cpp cracklib db devs diffutils file filesystem fillup findutils gawk glibc glibc-devel glibc-locale gpm grep groff gzip info insserv less libattr libgcc libstdc++ libxcrypt m4 make man mktemp patch permissions popt readline sed syslogd sysvinit tar timezone util-linux vim zlib zlib-devel autoconf automake binutils gcc gcc-c++ gdbm gettext libstdc++-devel libtool perl rpm
-
-Name:         libebml
-URL:          http://sourceforge.net/projects/ebml
-Version: 0.7.5
-Release: 1
-Summary:      libary to parse EBML files.
-License:      LGPL
-Group:        Development/Libraries/Other
-Source:       %{name}-%{version}.tar.bz2
-Patch:        suse-libebml-makefile.diff
-Summary:      libary to parse EBML files.
-BuildRoot:    %{_tmppath}/%{name}-%{version}-build
-Prefix:       /usr
-
-%description
-libebml is a C++ libary to parse EBML files. See the EBML RFV at
-http://www.matroska.org/technical/specs/rfc/
-
-
-
-Authors:
---------
-    Steve Lhomme <steve.lhomme at free.fr>
-    Moritz Bunkus <moritz at bunkus.org>
-
-%prep
-rm -rf $RPM_BUILD_ROOT
-%setup
-%patch -p1
-
-%build
-export CFLAGS="$RPM_OPT_FLAGS"
-cd make/linux
-make PREFIX=$RPM_BUILD_ROOT/usr LIBDIR=%{_libdir} staticlib
-
-%install
-cd make/linux
-make install_staticlib install_headers PREFIX=$RPM_BUILD_ROOT/usr LIBDIR=$RPM_BUILD_ROOT/%{_libdir}
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post
-%run_ldconfig
-
-%postun
-%run_ldconfig
-
-%files
-%defattr (-,root,root)
-%{_libdir}/libebml.a
-/usr/include/ebml
-
-%changelog -n libebml
-* Sat Apr 16 2005 - moritz at bunkus.org
-- modified for the new libebml build targets
-* Wed Sep 01 2004 - seife at suse.de
-- initial submission
+#
+# spec file for package libebml for (at least) SuSE Linux 9.0, 9.1
+#
+# Copyright (c) 2004 SUSE LINUX AG, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
+#
+# Please submit bugfixes or comments via http://www.suse.de/feedback/
+#
+
+# neededforbuild  gcc-c++ libstdc++-devel
+
+BuildRequires: bzip2 cpp libebml make patch tar zlib zlib-devel binutils gcc gcc-c++ libstdc++-devel perl rpm
+
+Name:         libebml
+URL:          http://sourceforge.net/projects/ebml
+Version: 0.7.8
+Release: 1
+Summary:      libary to parse EBML files.
+License:      LGPL
+Group:        Development/Libraries/Other
+Source:       %{name}-%{version}.tar.bz2
+Patch:        suse-libebml-makefile.diff
+Summary:      libary to parse EBML files.
+BuildRoot:    %{_tmppath}/%{name}-%{version}-build
+Prefix:       /usr
+
+%description
+libebml is a C++ libary to parse EBML files. See the EBML RFV at
+http://www.matroska.org/technical/specs/rfc/
+
+
+
+Authors:
+--------
+    Steve Lhomme <steve.lhomme at free.fr>
+    Moritz Bunkus <moritz at bunkus.org>
+
+%prep
+rm -rf $RPM_BUILD_ROOT
+%setup
+%patch -p1
+
+%build
+export CFLAGS="$RPM_OPT_FLAGS"
+cd make/linux
+make PREFIX=$RPM_BUILD_ROOT/usr LIBDIR=%{_libdir} staticlib
+
+%install
+cd make/linux
+make install_staticlib install_headers PREFIX=$RPM_BUILD_ROOT/usr LIBDIR=$RPM_BUILD_ROOT/%{_libdir}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post
+%run_ldconfig
+
+%postun
+%run_ldconfig
+
+%files
+%defattr (-,root,root)
+%{_libdir}/libebml.a
+/usr/include/ebml
+
+%changelog -n libebml
+* Sat Apr 16 2005 - moritz at bunkus.org
+- modified for the new libebml build targets
+* Wed Sep 01 2004 - seife at suse.de
+- initial submission
diff --git a/make/mingw32/Makefile b/make/mingw32/Makefile
index 3ee7cae..afdef56 100644
--- a/make/mingw32/Makefile
+++ b/make/mingw32/Makefile
@@ -1,71 +1,74 @@
-# Project: libebml
-# Makefile created by Dev-C++ 4.9.7.0
-
-# Normally libebml is built as a static library.
-# Uncomment this if you want a shared library instead.
-# ATTENTION: If your app uses this DLL you have to define EBML_DLL !
-SHARED = yes
-
-# Compile with debug information?
-#DEBUG = yes
-
-
-#
-# Don't change anything below this line.
-#
-ifeq (yes,$(DEBUG))
-DEBUGFLAGS=-g -DDEBUG
-endif
-CXX  = g++.exe
-CC   = gcc.exe
-WINDRES = windres.exe
-RES  = 
-SRC  = $(wildcard ../../src/*.cpp)
-OBJ  = $(patsubst %.cpp,%.o,$(SRC))
-ifeq (yes,$(SHARED))
-LIBS = libebml.dll
-CXXFLAGS = -DEBML_DLL -DEBML_DLL_EXPORT
-else
-LIBS = libebml.a
-endif
-INCS = -I../..
-CXXFLAGS += $(DEBUGFLAGS) $(INCS) 
-
-.PHONY: all all-before all-after clean clean-custom
-
-.cpp.o:
-	$(CXX) $(CXXFLAGS) -c -o $@ $<
-
-all: lib
-
-lib: $(LIBS)
-
-clean:
-	rm -f $(OBJ) libebml.a libebml.dll libebml.dll.a
-
-distclean dist-clean: clean
-	rm -f .depend
-
-libebml.a: $(OBJ)
-	ar r $@ $(OBJ)
-	ranlib $@
-
-libebml.dll: $(OBJ)
-	$(CXX) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
-
-depend:
-	@echo Calculating dependecies:
-	@rm -f .depend
-	@touch .depend
-	@for i in $(SRC); do \
-		o="`echo $$i | sed -e 's/\.c$$/.o/' -e 's/\.cpp$$/.o/'`" ; \
-		echo '  ' $$i: $$o ; \
-		$(CXX) $(CXXFLAGS) -MM -MT $$o $$i >> .depend ; \
-	done
-
-#
-# include dependency files if they exist
-#
-ifneq ($(wildcard .depend),)
-include .depend
-endif
+# Project: libebml
+# Makefile created by Dev-C++ 4.9.7.0
+
+# Normally libebml is built as a static library.
+# Uncomment this if you want a shared library instead.
+# ATTENTION: If your app uses this DLL you have to define EBML_DLL !
+SHARED = yes
+
+# Compile with debug information?
+#DEBUG = yes
+
+
+#
+# Don't change anything below this line.
+#
+ifeq (yes,$(DEBUG))
+DEBUGFLAGS=-g -DDEBUG
+endif
+CROSS   =
+CXX     = $(CROSS)g++
+CC      = $(CROSS)gcc
+WINDRES = $(CROSS)windres
+RANLIB  = $(CROSS)ranlib
+AR      = $(CROSS)ar
+RES  =
+SRC  = $(wildcard ../../src/*.cpp)
+OBJ  = $(patsubst %.cpp,%.o,$(SRC))
+ifeq (yes,$(SHARED))
+LIBS = libebml.dll
+DLLFLAGS = -DEBML_DLL -DEBML_DLL_EXPORT
+else
+LIBS = libebml.a
+endif
+INCS = -I$(shell pwd)/../..
+COMPILEFLAGS = $(DEBUGFLAGS) $(INCS) $(DLLFLAGS) $(CXXFLAGS)
+
+.PHONY: all all-before all-after clean clean-custom
+
+.cpp.o:
+	$(CXX) $(COMPILEFLAGS) -c -o $@ $<
+
+all: lib
+
+lib: $(LIBS)
+
+clean:
+	rm -f $(OBJ) libebml.a libebml.dll libebml.dll.a
+
+distclean dist-clean: clean
+	rm -f .depend
+
+libebml.a: $(OBJ)
+	$(AR) r $@ $(OBJ)
+	$(RANLIB) $@
+
+libebml.dll: $(OBJ)
+	$(CXX) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
+
+depend:
+	@echo Calculating dependecies:
+	@rm -f .depend
+	@touch .depend
+	@for i in $(SRC); do \
+		o="`echo $$i | sed -e 's/\.c$$/.o/' -e 's/\.cpp$$/.o/'`" ; \
+		echo '  ' $$i: $$o ; \
+		$(CXX) $(CXXFLAGS) -MM -MT $$o $$i >> .depend ; \
+	done
+
+#
+# include dependency files if they exist
+#
+ifneq ($(wildcard .depend),)
+include .depend
+endif
diff --git a/make/mingw32/libebml.dev b/make/mingw32/libebml.dev
index 52358dc..8644cf6 100644
--- a/make/mingw32/libebml.dev
+++ b/make/mingw32/libebml.dev
@@ -1,390 +1,390 @@
-[Project]
-FileName=libebml.dev
-Name=libebml
-UnitCount=43
-Type=2
-Ver=1
-ObjFiles=
-Includes=
-Libs=
-PrivateResource=
-ResourceIncludes=
-MakeIncludes=
-Resources=
-Compiler=
-Linker=
-IsCpp=1
-Icon=
-ExeOutput=
-ObjectOutput=
-OverrideOutput=0
-OverrideOutputName=
-HostApplication=
-Folders=
-CommandLine=
-IncludeVersionInfo=0
-SupportXPThemes=0
-CompilerSet=0
-CompilerSettings=
-
-[Unit1]
-FileName=..\..\src\StdIOCallback.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit2]
-FileName=..\..\src\Debug.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit3]
-FileName=..\..\src\EbmlBinary.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit4]
-FileName=..\..\src\EbmlBinary.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit5]
-FileName=..\..\src\EbmlConfig.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit6]
-FileName=..\..\src\EbmlContexts.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit7]
-FileName=..\..\src\EbmlContexts.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit8]
-FileName=..\..\src\EbmlCrc32.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit9]
-FileName=..\..\src\EbmlCrc32.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit10]
-FileName=..\..\src\EbmlDate.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit11]
-FileName=..\..\src\EbmlDate.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit12]
-FileName=..\..\src\EbmlElement.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit13]
-FileName=..\..\src\EbmlElement.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit14]
-FileName=..\..\src\EbmlEndian.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit15]
-FileName=..\..\src\EbmlFloat.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit16]
-FileName=..\..\src\EbmlFloat.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit17]
-FileName=..\..\src\EbmlHead.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit18]
-FileName=..\..\src\EbmlHead.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit19]
-FileName=..\..\src\EbmlId.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit20]
-FileName=..\..\src\EbmlMaster.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit21]
-FileName=..\..\src\EbmlMaster.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit22]
-FileName=..\..\src\EbmlSInteger.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit23]
-FileName=..\..\src\EbmlSInteger.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit24]
-FileName=..\..\src\EbmlStream.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit25]
-FileName=..\..\src\EbmlStream.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit26]
-FileName=..\..\src\EbmlString.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit27]
-FileName=..\..\src\EbmlString.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit28]
-FileName=..\..\src\EbmlSubHead.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit29]
-FileName=..\..\src\EbmlSubHead.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit30]
-FileName=..\..\src\EbmlTypes.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit31]
-FileName=..\..\src\EbmlUInteger.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit32]
-FileName=..\..\src\EbmlUInteger.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit33]
-FileName=..\..\src\EbmlUnicodeString.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit34]
-FileName=..\..\src\EbmlUnicodeString.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit35]
-FileName=..\..\src\EbmlVersion.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit36]
-FileName=..\..\src\EbmlVersion.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit37]
-FileName=..\..\src\EbmlVoid.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit38]
-FileName=..\..\src\EbmlVoid.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit39]
-FileName=..\..\src\IOCallback.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit40]
-FileName=..\..\src\IOCallback.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit41]
-FileName=..\..\src\StdInclude.h
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit42]
-FileName=..\..\src\StdIOCallback.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit43]
-FileName=..\..\src\Debug.cpp
-Folder=libebml
-Compile=1
-CompileCpp=1
-OverrideBuildCmd=0
-BuildCmd=
-
-[VersionInfo]
-Major=0
-Minor=1
-Release=1
-Build=1
-LanguageID=1033
-CharsetID=1252
-CompanyName=
-FileVersion=
-FileDescription=Developed using the Dev-C++ IDE
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=
-
+[Project]
+FileName=libebml.dev
+Name=libebml
+UnitCount=43
+Type=2
+Ver=1
+ObjFiles=
+Includes=
+Libs=
+PrivateResource=
+ResourceIncludes=
+MakeIncludes=
+Resources=
+Compiler=
+Linker=
+IsCpp=1
+Icon=
+ExeOutput=
+ObjectOutput=
+OverrideOutput=0
+OverrideOutputName=
+HostApplication=
+Folders=
+CommandLine=
+IncludeVersionInfo=0
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=
+
+[Unit1]
+FileName=..\..\src\StdIOCallback.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit2]
+FileName=..\..\src\Debug.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit3]
+FileName=..\..\src\EbmlBinary.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit4]
+FileName=..\..\src\EbmlBinary.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit5]
+FileName=..\..\src\EbmlConfig.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit6]
+FileName=..\..\src\EbmlContexts.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit7]
+FileName=..\..\src\EbmlContexts.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit8]
+FileName=..\..\src\EbmlCrc32.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit9]
+FileName=..\..\src\EbmlCrc32.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit10]
+FileName=..\..\src\EbmlDate.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit11]
+FileName=..\..\src\EbmlDate.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit12]
+FileName=..\..\src\EbmlElement.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit13]
+FileName=..\..\src\EbmlElement.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit14]
+FileName=..\..\src\EbmlEndian.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit15]
+FileName=..\..\src\EbmlFloat.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit16]
+FileName=..\..\src\EbmlFloat.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit17]
+FileName=..\..\src\EbmlHead.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit18]
+FileName=..\..\src\EbmlHead.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit19]
+FileName=..\..\src\EbmlId.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit20]
+FileName=..\..\src\EbmlMaster.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit21]
+FileName=..\..\src\EbmlMaster.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit22]
+FileName=..\..\src\EbmlSInteger.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit23]
+FileName=..\..\src\EbmlSInteger.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit24]
+FileName=..\..\src\EbmlStream.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit25]
+FileName=..\..\src\EbmlStream.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit26]
+FileName=..\..\src\EbmlString.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit27]
+FileName=..\..\src\EbmlString.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit28]
+FileName=..\..\src\EbmlSubHead.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit29]
+FileName=..\..\src\EbmlSubHead.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit30]
+FileName=..\..\src\EbmlTypes.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit31]
+FileName=..\..\src\EbmlUInteger.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit32]
+FileName=..\..\src\EbmlUInteger.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit33]
+FileName=..\..\src\EbmlUnicodeString.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit34]
+FileName=..\..\src\EbmlUnicodeString.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit35]
+FileName=..\..\src\EbmlVersion.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit36]
+FileName=..\..\src\EbmlVersion.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit37]
+FileName=..\..\src\EbmlVoid.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit38]
+FileName=..\..\src\EbmlVoid.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit39]
+FileName=..\..\src\IOCallback.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit40]
+FileName=..\..\src\IOCallback.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit41]
+FileName=..\..\src\StdInclude.h
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit42]
+FileName=..\..\src\StdIOCallback.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit43]
+FileName=..\..\src\Debug.cpp
+Folder=libebml
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=0
+Minor=1
+Release=1
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=
+
diff --git a/src/Debug.cpp b/src/Debug.cpp
index 423d5b7..b9bd654 100644
--- a/src/Debug.cpp
+++ b/src/Debug.cpp
@@ -30,7 +30,7 @@
 
 /*!
 	\file
-	\version \$Id: Debug.cpp 1198 2005-08-26 08:18:50Z mosu $
+	\version \$Id: Debug.cpp 1268 2007-01-19 10:15:08Z robux4 $
 	\author Steve Lhomme     <robux4 @ users.sf.net>
 	\author Moritz Bunkus <moritz @ bunkus.org>
 */
@@ -84,7 +84,7 @@ inline int ADbg::_OutPut(const char * format,va_list params) const
 		SYSTEMTIME time;
 		GetSystemTime(&time);
 		if (prefix[0] == '\0')
-			wsprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s\r\n",
+			wsprintfA(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s\r\n",
 							time.wYear,
 							time.wMonth,
 							time.wDay,
@@ -94,7 +94,7 @@ inline int ADbg::_OutPut(const char * format,va_list params) const
 							time.wMilliseconds,
 							format);
 		else
-			wsprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s - %s\r\n",
+			wsprintfA(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s - %s\r\n",
 							time.wYear,
 							time.wMonth,
 							time.wDay,
@@ -106,19 +106,19 @@ inline int ADbg::_OutPut(const char * format,va_list params) const
 							format);
 	} else {
 		if (prefix[0] == '\0')
-			wsprintf( myformat, "%s\r\n", format);
+			wsprintfA( myformat, "%s\r\n", format);
 		else
-			wsprintf( myformat, "%s - %s\r\n", prefix, format);
+			wsprintfA( myformat, "%s - %s\r\n", prefix, format);
 	}
 	result = vsprintf(tst,myformat,params);
 	
 	if (my_debug_output)
-		OutputDebugString(tst);
+		OutputDebugStringA(tst);
 
 	if (my_use_file && (hFile != NULL)) {
 		SetFilePointer( hFile, 0, 0, FILE_END );
 		DWORD written;
-		WriteFile( hFile, tst, lstrlen(tst), &written, NULL );
+		WriteFile( hFile, tst, lstrlenA(tst), &written, NULL );
 	}
 #else
 	if (my_time_included) {
@@ -192,7 +192,7 @@ bool ADbg::setDebugFile(const char * NewFilename) {
 		result = false;
 
 #ifdef WIN32
-		hFile = CreateFile(NewFilename, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
+		hFile = CreateFileA(NewFilename, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
 		
 		if (hFile != INVALID_HANDLE_VALUE) {
 			SetFilePointer( hFile, 0, 0, FILE_END );
diff --git a/src/EbmlBinary.cpp b/src/EbmlBinary.cpp
index d23a88d..42a2338 100644
--- a/src/EbmlBinary.cpp
+++ b/src/EbmlBinary.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -50,9 +50,9 @@ EbmlBinary::EbmlBinary(const EbmlBinary & ElementToClone)
 	if (ElementToClone.Data == NULL)
 		Data = NULL;
 	else {
-		Data = (binary *)malloc(Size * sizeof(binary));
+		Data = (binary *)malloc(GetSize() * sizeof(binary));
 		assert(Data != NULL);
-		memcpy(Data, ElementToClone.Data, Size);
+		memcpy(Data, ElementToClone.Data, GetSize());
 	}
 }
 
@@ -61,22 +61,22 @@ EbmlBinary::~EbmlBinary(void) {
 		free(Data);
 }
 
-uint32 EbmlBinary::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlBinary::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
-	output.writeFully(Data,Size);
+	output.writeFully(Data,GetSize());
 
-	return Size;
+	return GetSize();
 }
 	
 /*!
 	\note no Default binary value handled
 */
-uint64 EbmlBinary::UpdateSize(bool bKeepIntact, bool bForceRender)
+uint64 EbmlBinary::UpdateSize(bool bWithDefault, bool bForceRender)
 {
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlBinary::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlBinary::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
 	if (Data != NULL)
 		free(Data);
@@ -84,18 +84,18 @@ uint64 EbmlBinary::ReadData(IOCallback & input, ScopeMode ReadFully)
 	if (ReadFully == SCOPE_NO_DATA)
 	{
 		Data = NULL;
-		return Size;
+		return GetSize();
 	}
 
-	Data = (binary *)malloc(Size * sizeof(binary));
+	Data = (binary *)malloc(GetSize() * sizeof(binary));
 	assert(Data != NULL);
-	bValueIsSet = true;
-	return input.read(Data, Size);
+	SetValueIsSet();
+	return input.read(Data, GetSize());
 }
 
 bool EbmlBinary::operator==(const EbmlBinary & ElementToCompare) const
 {
-	return ((Size == ElementToCompare.Size) && !memcmp(Data, ElementToCompare.Data, Size));
+	return ((GetSize() == ElementToCompare.GetSize()) && !memcmp(Data, ElementToCompare.Data, GetSize()));
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlContexts.cpp b/src/EbmlContexts.cpp
index d5c362b..1c28f3e 100644
--- a/src/EbmlContexts.cpp
+++ b/src/EbmlContexts.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -39,13 +39,13 @@
 
 START_LIBEBML_NAMESPACE
 
-const EbmlSemantic EbmlGlobal_ContextList[2] =
+static const EbmlSemantic EbmlGlobal_ContextList[2] =
 {
-	EbmlSemantic(false, false, EbmlCrc32::ClassInfos),   ///< EbmlCrc32
-	EbmlSemantic(false, false, EbmlVoid::ClassInfos),    ///< EbmlVoid
+	EbmlSemantic(false, false, EBML_INFO(EbmlCrc32)),   ///< EbmlCrc32
+	EbmlSemantic(false, false, EBML_INFO(EbmlVoid)),    ///< EbmlVoid
 };
 
-const EbmlSemanticContext EbmlVoid_Context = EbmlSemanticContext(0, NULL, NULL, *GetEbmlGlobal_Context, NULL);
+const EbmlSemanticContext Context_EbmlGlobal = EbmlSemanticContext(0, NULL, NULL, *GetEbmlGlobal_Context, NULL);
 
 static const EbmlSemanticContext EbmlGlobal_Context = EbmlSemanticContext(countof(EbmlGlobal_ContextList), EbmlGlobal_ContextList, NULL, *GetEbmlGlobal_Context, NULL);
 
diff --git a/src/EbmlCrc32.cpp b/src/EbmlCrc32.cpp
index bb66c5a..907dd7d 100644
--- a/src/EbmlCrc32.cpp
+++ b/src/EbmlCrc32.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -40,8 +40,7 @@
 
 START_LIBEBML_NAMESPACE
 
-EbmlId EbmlCrc32_TheId(0xBF, 1);
-const EbmlCallbacks EbmlCrc32::ClassInfos(EbmlCrc32::Create, EbmlCrc32_TheId, "EBMLCrc32\0ratamadabapa", EbmlVoid_Context);
+DEFINE_EBML_CLASS_GLOBAL(EbmlCrc32, 0xBF, 1, "EBMLCrc32\0ratamadabapa");
 
 const uint32 EbmlCrc32::m_tab[] = {
 #ifdef WORDS_BIGENDIAN
@@ -156,11 +155,11 @@ const uint32 EbmlCrc32::m_tab[] = {
 EbmlCrc32::EbmlCrc32()
 {
 	ResetCRC();
-	DefaultSize = DIGESTSIZE;
+	SetDefaultSize(DIGESTSIZE);
 	m_crc_final = 0;
-	Size = 4;
+	SetSize_(4);
 	//This EbmlElement has been set
-//	bValueIsSet = true;
+//	SetValueIsSet();
 }
 
 EbmlCrc32::EbmlCrc32(const EbmlCrc32 & ElementToClone)
@@ -170,11 +169,6 @@ EbmlCrc32::EbmlCrc32(const EbmlCrc32 & ElementToClone)
 	m_crc_final = ElementToClone.m_crc_final;
 }
 
-EbmlElement * EbmlCrc32::Clone() const
-{
-	return new EbmlCrc32(*this);
-}
-
 void EbmlCrc32::AddElementCRC32(EbmlElement &ElementToCRC)
 {
 	// Use a special IOCallback class that Render's to memory instead of to disk
@@ -193,22 +187,22 @@ bool EbmlCrc32::CheckElementCRC32(EbmlElement &ElementToCRC)
 	return CheckCRC(m_crc_final, memoryBuffer.GetDataBuffer(), memoryBuffer.GetDataBufferSize());
 };
 
-uint32 EbmlCrc32::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlCrc32::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
-	uint32 Result = DIGESTSIZE;
+	filepos_t Result = DIGESTSIZE;
 
 	if (Result != 0) {
 	    output.writeFully(&m_crc_final, Result);
 	}
 
-	if (Result < DefaultSize) {
+	if (Result < GetDefaultSize()) {
 		// pad the rest with 0
-		binary *Pad = new binary[DefaultSize - Result];
+		binary *Pad = new binary[GetDefaultSize() - Result];
 		if (Pad != NULL) {
-			memset(Pad, 0x00, DefaultSize - Result);
-			output.writeFully(Pad, DefaultSize - Result);
+			memset(Pad, 0x00, GetDefaultSize() - Result);
+			output.writeFully(Pad, GetDefaultSize() - Result);
 
-			Result = DefaultSize;
+			Result = GetDefaultSize();
 			delete [] Pad;
 		}
 	}
@@ -216,24 +210,24 @@ uint32 EbmlCrc32::RenderData(IOCallback & output, bool bForceRender, bool bKeepI
 	return Result;
 }
 
-uint64 EbmlCrc32::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlCrc32::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
 	if (ReadFully != SCOPE_NO_DATA)
 	{
-		binary *Buffer = new binary[Size];
+		binary *Buffer = new binary[GetSize()];
 		if (Buffer == NULL) {
 			// impossible to read, skip it
-			input.setFilePointer(Size, seek_current);
+			input.setFilePointer(GetSize(), seek_current);
 		} else {
-			input.readFully(Buffer, Size);
+			input.readFully(Buffer, GetSize());
 
 			memcpy((void *)&m_crc_final, Buffer, 4);
 			delete [] Buffer;
-			bValueIsSet = true;
+			SetValueIsSet();
 		}
 	}
 
-	return Size;
+	return GetSize();
 }
 
 bool EbmlCrc32::CheckCRC(uint32 inputCRC, const binary *input, uint32 length)
@@ -333,7 +327,7 @@ void EbmlCrc32::Finalize()
 	//Reset the holding CRC member (m_crc)
 	ResetCRC();
 	//This EbmlElement has been set
-	bValueIsSet = true;
+	SetValueIsSet();
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlDate.cpp b/src/EbmlDate.cpp
index 32d49ab..e1344f9 100644
--- a/src/EbmlDate.cpp
+++ b/src/EbmlDate.cpp
@@ -3,18 +3,18 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This library is free software; you can redistribute it and/or
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -45,36 +45,44 @@ EbmlDate::EbmlDate(const EbmlDate & ElementToClone)
 	myDate = ElementToClone.myDate;
 }
 
-uint64 EbmlDate::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlDate::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
 	if (ReadFully != SCOPE_NO_DATA)
 	{
-		if (Size != 0) {
-			assert(Size == 8);
+		if (GetSize() != 0) {
+			assert(GetSize() == 8);
 			binary Buffer[8];
-			input.readFully(Buffer, Size);
-		
+			input.readFully(Buffer, GetSize());
+
 			big_int64 b64;
 			b64.Eval(Buffer);
-			
+
 			myDate = b64;
-			bValueIsSet = true;
+			SetValueIsSet();
 		}
 	}
-	
-	return Size;
+
+	return GetSize();
 }
 
-uint32 EbmlDate::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlDate::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
-	if (Size != 0) {
-		assert(Size == 8);
+	if (GetSize() != 0) {
+		assert(GetSize() == 8);
 		big_int64 b64(myDate);
-		
-		output.writeFully(&b64.endian(),Size);
+
+		output.writeFully(&b64.endian(),GetSize());
 	}
 
-	return Size;
+	return GetSize();
+}
+
+bool EbmlDate::IsSmallerThan(const EbmlElement *Cmp) const
+{
+	if (EbmlId(*this) == EbmlId(*Cmp))
+		return this->myDate < static_cast<const EbmlDate *>(Cmp)->myDate;
+	else
+		return false;
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlDummy.cpp b/src/EbmlDummy.cpp
index 17bf40f..34db913 100644
--- a/src/EbmlDummy.cpp
+++ b/src/EbmlDummy.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -38,8 +38,8 @@
 
 START_LIBEBML_NAMESPACE
 
-const EbmlId EbmlDummy::DummyRawId(0xFF, 1);
-const EbmlSemanticContext EbmlDummy_Context = EbmlSemanticContext(0, NULL, NULL, *GetEbmlGlobal_Context, &EbmlDummy::ClassInfos);
-const EbmlCallbacks EbmlDummy::ClassInfos(NULL, DummyRawId, "DummyElement", EbmlDummy_Context);
+DEFINE_EBML_CLASS_ORPHAN(EbmlDummy, 0xFF, 1, "DummyElement");
+
+const EbmlId EbmlDummy::DummyRawId = Id_EbmlDummy;
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlElement.cpp b/src/EbmlElement.cpp
index 50f3b16..f75902f 100644
--- a/src/EbmlElement.cpp
+++ b/src/EbmlElement.cpp
@@ -3,18 +3,18 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This library is free software; you can redistribute it and/or
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -33,6 +33,7 @@
 */
 
 #include <cassert>
+#include <cstring>
 
 #include "ebml/EbmlElement.h"
 #include "ebml/EbmlMaster.h"
@@ -201,7 +202,27 @@ int64 ReadCodedSizeSignedValue(const binary * InBuffer, uint32 & BufferSize, uin
 	return Result;
 }
 
-EbmlElement::EbmlElement(const uint64 aDefaultSize, bool bValueSet)
+
+EbmlCallbacks::EbmlCallbacks(EbmlElement & (*Creator)(), const EbmlId & aGlobalId, const char * aDebugName, const EbmlSemanticContext & aContext)
+	:Create(Creator)
+	,GlobalId(aGlobalId)
+	,DebugName(aDebugName)
+	,Context(aContext)
+{
+  assert((Create!=NULL) || !strcmp(aDebugName, "DummyElement"));
+}
+
+const EbmlSemantic & EbmlSemanticContext::GetSemantic(size_t i) const
+{
+    assert(i<Size);
+    if (i<Size)
+        return MyTable[i];
+    else
+        return *(EbmlSemantic*)NULL;
+}
+
+
+EbmlElement::EbmlElement(uint64 aDefaultSize, bool bValueSet)
  :DefaultSize(aDefaultSize)
  ,SizeLength(0) ///< write optimal size by default
  ,bSizeIsFinite(true)
@@ -227,6 +248,11 @@ EbmlElement::EbmlElement(const EbmlElement & ElementToClone)
 {
 }
 
+EbmlElement::~EbmlElement()
+{
+    assert(!bLocked);
+}
+
 /*!
 	\todo this method is deprecated and should be called FindThisID
 	\todo replace the new RawElement with the appropriate class (when known)
@@ -240,7 +266,7 @@ EbmlElement * EbmlElement::FindNextID(IOCallback & DataStream, const EbmlCallbac
 	uint64 SizeUnknown;
 	uint64 SizeFound;
 	bool bElementFound = false;
-	
+
 	binary BitMask;
 	uint64 aElementPosition, aSizePosition;
 	while (!bElementFound) {
@@ -259,7 +285,7 @@ EbmlElement * EbmlElement::FindNextID(IOCallback & DataStream, const EbmlCallbac
 			if (PossibleId[0] & BitMask) {
 				// this is the last octet of the ID
 				// check wether that's the one we're looking for
-/*			if (PossibleID == ClassInfos.GlobalId) {
+/*			if (PossibleID == EBML_INFO_ID(ClassInfos)) {
 					break;
 				} else {
 					/// \todo This element should be skipped (use a context ?)
@@ -269,7 +295,7 @@ EbmlElement * EbmlElement::FindNextID(IOCallback & DataStream, const EbmlCallbac
 			}
 			BitMask >>= 1;
 		}
-		
+
 		// read the data size
 		aSizePosition = DataStream.getFilePointer();
 		uint32 _SizeLength;
@@ -283,19 +309,19 @@ EbmlElement * EbmlElement::FindNextID(IOCallback & DataStream, const EbmlCallbac
 			SizeFound = ReadCodedSizeValue(&PossibleSize[0], _SizeLength, SizeUnknown);
 		} while (_SizeLength == 0);
 	}
-	
+
 	EbmlElement *Result = NULL;
 	EbmlId PossibleID(PossibleId, PossibleID_Length);
-	if (PossibleID == ClassInfos.GlobalId) {
+	if (PossibleID == EBML_INFO_ID(ClassInfos)) {
 		// the element is the one expected
-		Result = &ClassInfos.Create();
+		Result = &EBML_INFO_CREATE(ClassInfos);
 	} else {
 		/// \todo find the element in the context
 		Result = new EbmlDummy(PossibleID);
 	}
-	
+
 	Result->SetSizeLength(PossibleSizeLength);
-	
+
 	Result->Size = SizeFound;
 
 	if (!Result->ValidateSize() || (SizeFound != SizeUnknown && MaxDataSize < Result->Size)) {
@@ -315,7 +341,7 @@ EbmlElement * EbmlElement::FindNextID(IOCallback & DataStream, const EbmlCallbac
 	} else Result->SetSizeInfinite(false);
 	Result->ElementPosition = aElementPosition;
 	Result->SizePosition = aSizePosition;
-	
+
 	return Result;
 }
 
@@ -326,7 +352,7 @@ EbmlElement * EbmlElement::FindNextID(IOCallback & DataStream, const EbmlCallbac
 	\todo better check of the size checking for upper elements (using a list of size for each level)
 	\param LowLevel Will be returned with the level of the element found compared to the context given
 */
-EbmlElement * EbmlElement::FindNextElement(IOCallback & DataStream, const EbmlSemanticContext & Context, int & UpperLevel, 
+EbmlElement * EbmlElement::FindNextElement(IOCallback & DataStream, const EbmlSemanticContext & Context, int & UpperLevel,
 			uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel)
 {
 	int PossibleID_Length = 0;
@@ -339,7 +365,7 @@ EbmlElement * EbmlElement::FindNextElement(IOCallback & DataStream, const EbmlSe
 	int SizeIdx;
 	bool bFound;
 	int UpperLevel_original = UpperLevel;
-	
+
 	do {
 		// read a potential ID
 		do {
@@ -403,7 +429,7 @@ EbmlElement * EbmlElement::FindNextElement(IOCallback & DataStream, const EbmlSe
 			if (Result != NULL) {
 				if (AllowDummyElt || !Result->IsDummy()) {
 					Result->SetSizeLength(_SizeLength);
-					
+
 					Result->Size = SizeFound;
 					// UpperLevel values
 					// -1 : global element
@@ -415,8 +441,8 @@ EbmlElement * EbmlElement::FindNextElement(IOCallback & DataStream, const EbmlSe
 							Result->SetSizeInfinite();
 						}
 
-						Result->SizePosition = DataStream.getFilePointer() - SizeIdx + PossibleID.Length;
-						Result->ElementPosition = Result->SizePosition - PossibleID.Length;
+						Result->SizePosition = DataStream.getFilePointer() - SizeIdx + EBML_ID_LENGTH(PossibleID);
+						Result->ElementPosition = Result->SizePosition - EBML_ID_LENGTH(PossibleID);
 						// place the file at the beggining of the data
 						DataStream.setFilePointer(Result->SizePosition + _SizeLength);
 						return Result;
@@ -461,21 +487,21 @@ EbmlElement * EbmlElement::SkipData(EbmlStream & DataStream, const EbmlSemanticC
 			} else {
 				Result = TestReadElt;
 			}
-			
+
 			if (Result != NULL) {
 				unsigned int EltIndex;
 				// data known in this Master's context
-				for (EltIndex = 0; EltIndex < Context.Size; EltIndex++) {
-					if (EbmlId(*Result) == Context.MyTable[EltIndex].GetCallbacks.GlobalId) {
+				for (EltIndex = 0; EltIndex < EBML_CTX_SIZE(Context); EltIndex++) {
+					if (EbmlId(*Result) == EBML_CTX_IDX_ID(Context,EltIndex)) {
 						// skip the data with its own context
-						Result = Result->SkipData(DataStream, Context.MyTable[EltIndex].GetCallbacks.Context, NULL);
+						Result = Result->SkipData(DataStream, EBML_SEM_CONTEXT(EBML_CTX_IDX(Context,EltIndex)), NULL);
 						break; // let's go to the next ID
 					}
 				}
 
-				if (EltIndex >= Context.Size) {
-					if (Context.UpTable != NULL) {
-						Result = SkipData(DataStream, *Context.UpTable, Result);
+				if (EltIndex >= EBML_CTX_SIZE(Context)) {
+					if (EBML_CTX_PARENT(Context) != NULL) {
+						Result = SkipData(DataStream, *EBML_CTX_PARENT(Context), Result);
 					} else {
 						assert(Context.GetGlobalContext != NULL);
 						if (Context != Context.GetGlobalContext()) {
@@ -500,9 +526,9 @@ EbmlElement *EbmlElement::CreateElementUsingContext(const EbmlId & aID, const Eb
 	EbmlElement *Result = NULL;
 
 	// elements at the current level
-	for (ContextIndex = 0; ContextIndex < Context.Size; ContextIndex++) {
-		if (aID == Context.MyTable[ContextIndex].GetCallbacks.GlobalId) {
-			return &Context.MyTable[ContextIndex].GetCallbacks.Create();
+	for (ContextIndex = 0; ContextIndex < EBML_CTX_SIZE(Context); ContextIndex++) {
+		if (aID == EBML_CTX_IDX_ID(Context,ContextIndex)) {
+            return &EBML_SEM_CREATE(EBML_CTX_IDX(Context,ContextIndex));
 		}
 	}
 
@@ -524,16 +550,16 @@ EbmlElement *EbmlElement::CreateElementUsingContext(const EbmlId & aID, const Eb
 	}
 
 	// parent elements
-	if (Context.MasterElt != NULL && aID == Context.MasterElt->GlobalId) {
+	if (EBML_CTX_MASTER(Context) != NULL && aID == EBML_INFO_ID(*EBML_CTX_MASTER(Context))) {
 		LowLevel++; // already one level up (same as context)
-		return &Context.MasterElt->Create();
+		return &EBML_INFO_CREATE(*EBML_CTX_MASTER(Context));
 	}
 
 	// check wether it's not part of an upper context
-	if (Context.UpTable != NULL) {
+	if (EBML_CTX_PARENT(Context) != NULL) {
 		LowLevel++;
 		MaxLowerLevel++;
-		return CreateElementUsingContext(aID, *Context.UpTable, LowLevel, IsGlobalContext, bAllowDummy, MaxLowerLevel);
+		return CreateElementUsingContext(aID, *EBML_CTX_PARENT(Context), LowLevel, IsGlobalContext, bAllowDummy, MaxLowerLevel);
 	}
 
 	if (!IsGlobalContext && bAllowDummy) {
@@ -547,19 +573,19 @@ EbmlElement *EbmlElement::CreateElementUsingContext(const EbmlId & aID, const Eb
 /*!
 	\todo verify that the size written is the same as the data written
 */
-uint32 EbmlElement::Render(IOCallback & output, bool bKeepIntact, bool bKeepPosition, bool bForceRender)
+filepos_t EbmlElement::Render(IOCallback & output, bool bWithDefault, bool bKeepPosition, bool bForceRender)
 {
-	assert(bValueIsSet || (bKeepIntact && DefaultISset())); // an element is been rendered without a value set !!!
+	assert(bValueIsSet || (bWithDefault && DefaultISset())); // an element is been rendered without a value set !!!
 		                 // it may be a mandatory element without a default value
 	try {
-		if (!bKeepIntact && IsDefaultValue()) {
+		if (!bWithDefault && IsDefaultValue()) {
 			return 0;
 		}
 #if defined(_DEBUG) || defined(DEBUG)
-		uint64 SupposedSize = UpdateSize(bKeepIntact, bForceRender);
+		uint64 SupposedSize = UpdateSize(bWithDefault, bForceRender);
 #endif // _DEBUG
-		uint32 result = RenderHead(output, bForceRender, bKeepIntact, bKeepPosition);
-		uint64 WrittenSize = RenderData(output, bForceRender, bKeepIntact);
+		filepos_t result = RenderHead(output, bForceRender, bWithDefault, bKeepPosition);
+		uint64 WrittenSize = RenderData(output, bForceRender, bWithDefault);
 #if defined(_DEBUG) || defined(DEBUG)
 	if (SupposedSize != (0-1)) assert(WrittenSize == SupposedSize);
 #endif // DEBUG
@@ -577,48 +603,53 @@ uint32 EbmlElement::Render(IOCallback & output, bool bKeepIntact, bool bKeepPosi
 	\todo handle exceptions on errors
 	\todo handle CodeSize bigger than 5 bytes
 */
-uint32 EbmlElement::RenderHead(IOCallback & output, bool bForceRender, bool bKeepIntact, bool bKeepPosition)
+filepos_t EbmlElement::RenderHead(IOCallback & output, bool bForceRender, bool bWithDefault, bool bKeepPosition)
 {
-	if (EbmlId(*this).Length <= 0 || EbmlId(*this).Length > 4)
+	if (EBML_ID_LENGTH((const EbmlId&)*this) <= 0 || EBML_ID_LENGTH((const EbmlId&)*this) > 4)
 		return 0;
-	
-	UpdateSize(bKeepIntact, bForceRender);
-	
+
+	UpdateSize(bWithDefault, bForceRender);
+
 	return MakeRenderHead(output, bKeepPosition);
 }
-	
-uint32 EbmlElement::MakeRenderHead(IOCallback & output, bool bKeepPosition)
+
+filepos_t EbmlElement::MakeRenderHead(IOCallback & output, bool bKeepPosition)
 {
 	binary FinalHead[4+8]; // Class D + 64 bits coded size
 	unsigned int FinalHeadSize;
-	
-	FinalHeadSize = EbmlId(*this).Length;
+
+	FinalHeadSize = EBML_ID_LENGTH((const EbmlId&)*this);
 	EbmlId(*this).Fill(FinalHead);
 
 	int CodedSize = CodedSizeLength(Size, SizeLength, bSizeIsFinite);
 	CodedValueLength(Size, CodedSize, &FinalHead[FinalHeadSize]);
 	FinalHeadSize += CodedSize;
-	
+
 	output.writeFully(FinalHead, FinalHeadSize);
 	if (!bKeepPosition) {
 		ElementPosition = output.getFilePointer() - FinalHeadSize;
-		SizePosition = ElementPosition + EbmlId(*this).Length;
+		SizePosition = ElementPosition + EBML_ID_LENGTH((const EbmlId&)*this);
 	}
-	
+
 	return FinalHeadSize;
 }
 
-uint64 EbmlElement::ElementSize(bool bKeepIntact) const
+uint64 EbmlElement::ElementSize(bool bWithDefault) const
 {
-	if (!bKeepIntact && IsDefaultValue())
+	if (!bWithDefault && IsDefaultValue())
 		return 0; // won't be saved
-	return Size + EbmlId(*this).Length + CodedSizeLength(Size, SizeLength, bSizeIsFinite);
+	return Size + EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(Size, SizeLength, bSizeIsFinite);
+}
+
+bool EbmlElement::IsSmallerThan(const EbmlElement *Cmp) const
+{
+	return EbmlId(*this) == EbmlId(*Cmp);
 }
 
 bool EbmlElement::CompareElements(const EbmlElement *A, const EbmlElement *B)
 {
 	if (EbmlId(*A) == EbmlId(*B))
-		return *A < *B;
+		return A->IsSmallerThan(B);
 	else
 		return false;
 }
@@ -648,7 +679,7 @@ bool EbmlElement::ForceSize(uint64 NewSize)
 	return false;
 }
 
-uint32 EbmlElement::OverwriteHead(IOCallback & output, bool bKeepPosition)
+filepos_t EbmlElement::OverwriteHead(IOCallback & output, bool bKeepPosition)
 {
 	if (ElementPosition == 0) {
 		return 0; // the element has not been written
@@ -656,19 +687,19 @@ uint32 EbmlElement::OverwriteHead(IOCallback & output, bool bKeepPosition)
 
 	uint64 CurrentPosition = output.getFilePointer();
 	output.setFilePointer(GetElementPosition());
-	uint32 Result = MakeRenderHead(output, bKeepPosition);
+	filepos_t Result = MakeRenderHead(output, bKeepPosition);
 	output.setFilePointer(CurrentPosition);
 	return Result;
 }
 
-uint32 EbmlElement::VoidMe(IOCallback & output, bool bKeepIntact)
+uint32 EbmlElement::VoidMe(IOCallback & output, bool bWithDefault)
 {
 	if (ElementPosition == 0) {
 		return 0; // the element has not been written
 	}
 
 	EbmlVoid Dummy;
-	return Dummy.Overwrite(*this, output, bKeepIntact);
+	return Dummy.Overwrite(*this, output, bWithDefault);
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlFloat.cpp b/src/EbmlFloat.cpp
index c03f4c6..1cb466e 100644
--- a/src/EbmlFloat.cpp
+++ b/src/EbmlFloat.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -11,12 +11,12 @@
 ** modify it under the terms of the GNU Lesser General Public
 ** License as published by the Free Software Foundation; either
 ** version 2.1 of the License, or (at your option) any later version.
-** 
+**
 ** This library is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ** Lesser General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU Lesser General Public
 ** License along with this library; if not, write to the Free Software
 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -49,7 +49,7 @@ EbmlFloat::EbmlFloat(const EbmlFloat::Precision prec)
 EbmlFloat::EbmlFloat(const double aDefaultValue, const EbmlFloat::Precision prec)
  :EbmlElement(0, true), Value(aDefaultValue), DefaultValue(aDefaultValue)
 {
-	DefaultIsSet = true;
+	SetDefaultIsSet();
 	SetPrecision(prec);
 }
 
@@ -60,69 +60,91 @@ EbmlFloat::EbmlFloat(const EbmlFloat & ElementToClone)
 {
 }
 
+void EbmlFloat::SetDefaultValue(double aValue)
+{
+    assert(!DefaultISset());
+    DefaultValue = aValue;
+    SetDefaultIsSet();
+}
+
+const double EbmlFloat::DefaultVal() const
+{
+    assert(DefaultISset());
+    return DefaultValue;
+}
+
+
 /*!
 	\todo handle exception on errors
 	\todo handle 10 bits precision
 */
-uint32 EbmlFloat::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlFloat::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
-	assert(Size == 4 || Size == 8);
+	assert(GetSize() == 4 || GetSize() == 8);
 
-	if (Size == 4) {
+	if (GetSize() == 4) {
 		float val = Value;
 		int Tmp;
 		memcpy(&Tmp, &val, 4);
 		big_int32 TmpToWrite(Tmp);
-		output.writeFully(&TmpToWrite.endian(), Size);
-	} else if (Size == 8) {
+		output.writeFully(&TmpToWrite.endian(), GetSize());
+	} else if (GetSize() == 8) {
 		double val = Value;
 		int64 Tmp;
 		memcpy(&Tmp, &val, 8);
 		big_int64 TmpToWrite(Tmp);
-		output.writeFully(&TmpToWrite.endian(), Size);
-	} 
+		output.writeFully(&TmpToWrite.endian(), GetSize());
+	}
 
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlFloat::UpdateSize(bool bKeepIntact, bool bForceRender)
+uint64 EbmlFloat::UpdateSize(bool bWithDefault, bool bForceRender)
 {
-	if (!bKeepIntact && IsDefaultValue())
+	if (!bWithDefault && IsDefaultValue())
 		return 0;
-	return Size;
+	return GetSize();
 }
 
 /*!
 	\todo remove the hack for possible endianess pb (test on little & big endian)
 */
-uint64 EbmlFloat::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlFloat::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
 	if (ReadFully != SCOPE_NO_DATA)
 	{
 		binary Buffer[20];
-		assert(Size <= 20);
-		input.readFully(Buffer, Size);
-		
-		if (Size == 4) {
+		assert(GetSize() <= 20);
+		input.readFully(Buffer, GetSize());
+
+		if (GetSize() == 4) {
 			big_int32 TmpRead;
 			TmpRead.Eval(Buffer);
 			int32 tmpp = int32(TmpRead);
 			float val;
 			memcpy(&val, &tmpp, 4);
 			Value = val;
-			bValueIsSet = true;
-		} else if (Size == 8) {
+			SetValueIsSet();
+		} else if (GetSize() == 8) {
 			big_int64 TmpRead;
 			TmpRead.Eval(Buffer);
 			int64 tmpp = int64(TmpRead);
 			double val;
 			memcpy(&val, &tmpp, 8);
 			Value = val;
-			bValueIsSet = true;
+			SetValueIsSet();
 		}
 	}
 
-	return Size;
+	return GetSize();
+}
+
+bool EbmlFloat::IsSmallerThan(const EbmlElement *Cmp) const
+{
+	if (EbmlId(*this) == EbmlId(*Cmp))
+		return this->Value < static_cast<const EbmlFloat *>(Cmp)->Value;
+	else
+		return false;
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlHead.cpp b/src/EbmlHead.cpp
index 5e36dba..f439f8f 100644
--- a/src/EbmlHead.cpp
+++ b/src/EbmlHead.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -39,21 +39,17 @@
 
 START_LIBEBML_NAMESPACE
 
-const EbmlSemantic EbmlHead_ContextList[] =
-{
-	EbmlSemantic(true, true, EVersion::ClassInfos),        ///< EBMLVersion
-	EbmlSemantic(true, true, EReadVersion::ClassInfos),    ///< EBMLReadVersion
-	EbmlSemantic(true, true, EMaxIdLength::ClassInfos),    ///< EBMLMaxIdLength
-	EbmlSemantic(true, true, EMaxSizeLength::ClassInfos),  ///< EBMLMaxSizeLength
-	EbmlSemantic(true, true, EDocType::ClassInfos),        ///< DocType
-	EbmlSemantic(true, true, EDocTypeVersion::ClassInfos), ///< DocTypeVersion
-	EbmlSemantic(true, true, EDocTypeReadVersion::ClassInfos), ///< DocTypeReadVersion
-};
+DEFINE_START_SEMANTIC(EbmlHead)
+DEFINE_SEMANTIC_ITEM(true, true, EVersion)        ///< EBMLVersion
+DEFINE_SEMANTIC_ITEM(true, true, EReadVersion)    ///< EBMLReadVersion
+DEFINE_SEMANTIC_ITEM(true, true, EMaxIdLength)    ///< EBMLMaxIdLength
+DEFINE_SEMANTIC_ITEM(true, true, EMaxSizeLength)  ///< EBMLMaxSizeLength
+DEFINE_SEMANTIC_ITEM(true, true, EDocType)        ///< DocType
+DEFINE_SEMANTIC_ITEM(true, true, EDocTypeVersion) ///< DocTypeVersion
+DEFINE_SEMANTIC_ITEM(true, true, EDocTypeReadVersion) ///< DocTypeReadVersion
+DEFINE_END_SEMANTIC(EbmlHead)
 
-const EbmlSemanticContext EbmlHead_Context = EbmlSemanticContext(countof(EbmlHead_ContextList), EbmlHead_ContextList, NULL, *GetEbmlGlobal_Context, &EbmlHead::ClassInfos);
-
-EbmlId EbmlHead_TheId(0x1A45DFA3, 4);
-const EbmlCallbacks EbmlHead::ClassInfos(EbmlHead::Create, EbmlHead_TheId, "EBMLHead\0ratamapaga", EbmlHead_Context);
+DEFINE_EBML_MASTER_ORPHAN(EbmlHead, 0x1A45DFA3, 4, "EBMLHead\0ratamapaga");
 
 EbmlHead::EbmlHead()
  :EbmlMaster(EbmlHead_Context)
diff --git a/src/EbmlMaster.cpp b/src/EbmlMaster.cpp
index 3efe21a..6e1bf6b 100644
--- a/src/EbmlMaster.cpp
+++ b/src/EbmlMaster.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -44,11 +44,11 @@
 
 START_LIBEBML_NAMESPACE
 
-EbmlMaster::EbmlMaster(const EbmlSemanticContext & aContext, const bool bSizeIsknown)
+EbmlMaster::EbmlMaster(const EbmlSemanticContext & aContext, bool bSizeIsknown)
  :EbmlElement(0), Context(aContext), bChecksumUsed(bChecksumUsedByDefault)
 {
-	bSizeIsFinite = bSizeIsknown;
-	bValueIsSet = true;
+	SetSizeIsFinite(bSizeIsknown);
+	SetValueIsSet();
 	ProcessMandatory();
 }
 
@@ -72,7 +72,7 @@ EbmlMaster::EbmlMaster(const EbmlMaster & ElementToClone)
 
 EbmlMaster::~EbmlMaster()
 {
-	assert(!bLocked); // you're trying to delete a locked element !!!
+	assert(!IsLocked()); // you're trying to delete a locked element !!!
 
 	size_t Index;
 	
@@ -87,9 +87,9 @@ EbmlMaster::~EbmlMaster()
 	\todo handle exception on errors
 	\todo write all the Mandatory elements in the Context, otherwise assert
 */
-uint32 EbmlMaster::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlMaster::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
-	uint32 Result = 0;
+	filepos_t Result = 0;
 	size_t Index;
 
 	if (!bForceRender) {
@@ -98,16 +98,16 @@ uint32 EbmlMaster::RenderData(IOCallback & output, bool bForceRender, bool bKeep
 
 	if (!bChecksumUsed) { // old school
 		for (Index = 0; Index < ElementList.size(); Index++) {
-			if (!bKeepIntact && (ElementList[Index])->IsDefaultValue())
+			if (!bWithDefault && (ElementList[Index])->IsDefaultValue())
 				continue;
-			Result += (ElementList[Index])->Render(output, bKeepIntact, false ,bForceRender);
+			Result += (ElementList[Index])->Render(output, bWithDefault, false ,bForceRender);
 		}
 	} else { // new school
-		MemIOCallback TmpBuf(Size - 6);
+		MemIOCallback TmpBuf(GetSize() - 6);
 		for (Index = 0; Index < ElementList.size(); Index++) {
-			if (!bKeepIntact && (ElementList[Index])->IsDefaultValue())
+			if (!bWithDefault && (ElementList[Index])->IsDefaultValue())
 				continue;
-			(ElementList[Index])->Render(TmpBuf, bKeepIntact, false ,bForceRender);
+			(ElementList[Index])->Render(TmpBuf, bWithDefault, false ,bForceRender);
 		}
 		Checksum.FillCRC32(TmpBuf.GetDataBuffer(), TmpBuf.GetDataBufferSize());
 		Result += Checksum.Render(output, true, false ,bForceRender);
@@ -127,11 +127,11 @@ bool EbmlMaster::PushElement(EbmlElement & element)
 	return true;
 }
 
-uint64 EbmlMaster::UpdateSize(bool bKeepIntact, bool bForceRender)
+uint64 EbmlMaster::UpdateSize(bool bWithDefault, bool bForceRender)
 {
-	Size = 0;
+	SetSize_(0);
 
-	if (!bSizeIsFinite)
+	if (!IsFiniteSize())
 		return (0-1);
 
 	if (!bForceRender) {
@@ -141,36 +141,36 @@ uint64 EbmlMaster::UpdateSize(bool bKeepIntact, bool bForceRender)
 	size_t Index;
 	
 	for (Index = 0; Index < ElementList.size(); Index++) {
-		if (!bKeepIntact && (ElementList[Index])->IsDefaultValue())
+		if (!bWithDefault && (ElementList[Index])->IsDefaultValue())
 			continue;
-		(ElementList[Index])->UpdateSize(bKeepIntact, bForceRender);
-		uint64 SizeToAdd = (ElementList[Index])->ElementSize(bKeepIntact);
+		(ElementList[Index])->UpdateSize(bWithDefault, bForceRender);
+		uint64 SizeToAdd = (ElementList[Index])->ElementSize(bWithDefault);
 #if defined(_DEBUG) || defined(DEBUG)
 		if (SizeToAdd == (0-1))
 			return (0-1);
 #endif // DEBUG
-		Size += SizeToAdd;
+		SetSize_(GetSize() + SizeToAdd);
 	}
 	if (bChecksumUsed) {
-		Size += Checksum.ElementSize();
+		SetSize_(GetSize() + Checksum.ElementSize());
 	}
 
-	return Size;
+	return GetSize();
 }
 
-uint32 EbmlMaster::WriteHead(IOCallback & output, int nSizeLength, bool bKeepIntact)
+filepos_t EbmlMaster::WriteHead(IOCallback & output, int nSizeLength, bool bWithDefault)
 {
 	SetSizeLength(nSizeLength);
-	return RenderHead(output, false, bKeepIntact);
+	return RenderHead(output, false, bWithDefault);
 }
 
 /*!
 	\todo this code is very suspicious !
 */
-uint64 EbmlMaster::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlMaster::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
-	input.setFilePointer(Size, seek_current);
-	return Size;
+	input.setFilePointer(GetSize(), seek_current);
+	return GetSize();
 }
 
 /*!
@@ -179,18 +179,18 @@ uint64 EbmlMaster::ReadData(IOCallback & input, ScopeMode ReadFully)
 */
 bool EbmlMaster::ProcessMandatory()
 {
-	if (Context.Size == 0)
+	if (EBML_CTX_SIZE(Context) == 0)
 	{
 		return true;
 	}
 
-	assert(Context.MyTable != NULL);
+	assert(Context.GetSize() != 0);
 
 	unsigned int EltIdx;
-	for (EltIdx = 0; EltIdx < Context.Size; EltIdx++) {
-		if (Context.MyTable[EltIdx].Mandatory && Context.MyTable[EltIdx].Unique) {
-			assert(Context.MyTable[EltIdx].GetCallbacks.Create != NULL);
-			PushElement(Context.MyTable[EltIdx].GetCallbacks.Create());
+	for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) {
+		if (EBML_CTX_IDX(Context,EltIdx).IsMandatory() && EBML_CTX_IDX(Context,EltIdx).IsUnique()) {
+//			assert(EBML_CTX_IDX(Context,EltIdx).Create != NULL);
+            PushElement(EBML_SEM_CREATE(EBML_CTX_IDX(Context,EltIdx)));
 		}
 	}
 	return true;
@@ -198,15 +198,15 @@ bool EbmlMaster::ProcessMandatory()
 
 bool EbmlMaster::CheckMandatory() const
 {
-	assert(Context.MyTable != NULL);
+	assert(Context.GetSize() != 0);
 
 	unsigned int EltIdx;
-	for (EltIdx = 0; EltIdx < Context.Size; EltIdx++) {
-		if (Context.MyTable[EltIdx].Mandatory) {
-			if (FindElt(Context.MyTable[EltIdx].GetCallbacks) == NULL) {
+	for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) {
+		if (EBML_CTX_IDX(Context,EltIdx).IsMandatory()) {
+			if (FindElt(EBML_CTX_IDX_INFO(Context,EltIdx)) == NULL) {
 #if defined(_DEBUG) || defined(DEBUG)
 				// you are missing this Mandatory element
-// 				const char * MissingName = Context.MyTable[EltIdx].GetCallbacks.DebugName;
+// 				const char * MissingName = EBML_INFO_NAME(EBML_CTX_IDX_INFO(Context,EltIdx));
 #endif // DEBUG
 				return false;
 			}
@@ -218,7 +218,7 @@ bool EbmlMaster::CheckMandatory() const
 
 std::vector<std::string> EbmlMaster::FindAllMissingElements()
 {	
-	assert(Context.MyTable != NULL);
+	assert(Context.GetSize() != 0);
 
 	std::vector<std::string> missingElements;
 
@@ -227,9 +227,9 @@ std::vector<std::string> EbmlMaster::FindAllMissingElements()
 		if (!childElement->ValueIsSet()) {
 			std::string missingValue;
 			missingValue = "The Child Element \"";
-			missingValue.append(childElement->Generic().DebugName);
+			missingValue.append(EBML_NAME(childElement));
 			missingValue.append("\" of EbmlMaster \"");
-			missingValue.append(this->Generic().DebugName);
+			missingValue.append(EBML_NAME(this));
 			missingValue.append("\", does not have a value set.");
 			missingElements.push_back(missingValue);
 		}
@@ -243,14 +243,14 @@ std::vector<std::string> EbmlMaster::FindAllMissingElements()
 		}
 	}
 	unsigned int EltIdx;
-	for (EltIdx = 0; EltIdx < Context.Size; EltIdx++) {
-		if (Context.MyTable[EltIdx].Mandatory) {
-			if (FindElt(Context.MyTable[EltIdx].GetCallbacks) == NULL) {
+	for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) {
+		if (EBML_CTX_IDX(Context,EltIdx).IsMandatory()) {
+			if (FindElt(EBML_CTX_IDX_INFO(Context,EltIdx)) == NULL) {
 				std::string missingElement;
 				missingElement = "Missing element \"";
-				missingElement.append(Context.MyTable[EltIdx].GetCallbacks.DebugName);				
+                missingElement.append(EBML_INFO_NAME(EBML_CTX_IDX_INFO(Context,EltIdx)));
 				missingElement.append("\" in EbmlMaster \"");
-				missingElement.append(Context.MasterElt->DebugName);
+                missingElement.append(EBML_INFO_NAME(*EBML_CTX_MASTER(Context)));
 				missingElement.append("\"");
 				missingElements.push_back(missingElement);
 			}
@@ -266,25 +266,25 @@ EbmlElement *EbmlMaster::FindElt(const EbmlCallbacks & Callbacks) const
 	
 	for (Index = 0; Index < ElementList.size(); Index++) {
 		EbmlElement * tmp = ElementList[Index];
-		if (EbmlId(*tmp) == Callbacks.GlobalId)
+		if (EbmlId(*tmp) == EBML_INFO_ID(Callbacks))
 			return tmp;
 	}
 
 	return NULL;
 }
 
-EbmlElement *EbmlMaster::FindFirstElt(const EbmlCallbacks & Callbacks, const bool bCreateIfNull)
+EbmlElement *EbmlMaster::FindFirstElt(const EbmlCallbacks & Callbacks, bool bCreateIfNull)
 {
 	size_t Index;
 	
 	for (Index = 0; Index < ElementList.size(); Index++) {
-		if (EbmlId(*(ElementList[Index])) == Callbacks.GlobalId)
+		if (EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks))
 			return ElementList[Index];
 	}
 	
-	if (bCreateIfNull && Callbacks.Create != NULL) {
+	if (bCreateIfNull) {
 		// add the element
-		EbmlElement *NewElt = &(Callbacks.Create());
+		EbmlElement *NewElt = &EBML_INFO_CREATE(Callbacks);
 		if (NewElt == NULL)
 			return NULL;
 
@@ -303,7 +303,7 @@ EbmlElement *EbmlMaster::FindFirstElt(const EbmlCallbacks & Callbacks) const
 	size_t Index;
 	
 	for (Index = 0; Index < ElementList.size(); Index++) {
-		if (EbmlId(*(ElementList[Index])) == Callbacks.GlobalId)
+		if (EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks))
 			return ElementList[Index];
 	}
 	
@@ -314,7 +314,7 @@ EbmlElement *EbmlMaster::FindFirstElt(const EbmlCallbacks & Callbacks) const
 	\todo only return elements that are from the same type !
 	\todo the element might be the unique in the context !
 */
-EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt, const bool bCreateIfNull)
+EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt, bool bCreateIfNull)
 {
 	size_t Index;
 	
@@ -327,7 +327,7 @@ EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt, const bool bCr
 	}
 
 	while (Index < ElementList.size()) {
-		if (PastElt.Generic().GlobalId == ElementList[Index]->Generic().GlobalId)
+		if ((EbmlId)PastElt == (EbmlId)(*ElementList[Index]))
 			break;
 		Index++;
 	}
@@ -335,9 +335,9 @@ EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt, const bool bCr
 	if (Index != ElementList.size())
 		return ElementList[Index];
 
-	if (bCreateIfNull && PastElt.Generic().Create != NULL) {
+	if (bCreateIfNull) {
 		// add the element
-		EbmlElement *NewElt = &(PastElt.Generic().Create());
+		EbmlElement *NewElt = &(PastElt.CreateElement());
 		if (NewElt == NULL)
 			return NULL;
 
@@ -364,7 +364,7 @@ EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt) const
 	}
 
 	while (Index < ElementList.size()) {
-		if (PastElt.Generic().GlobalId == ElementList[Index]->Generic().GlobalId)
+		if ((EbmlId)PastElt == (EbmlId)(*ElementList[Index]))
 			return ElementList[Index];
 		Index++;
 	}
@@ -375,7 +375,7 @@ EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt) const
 EbmlElement *EbmlMaster::AddNewElt(const EbmlCallbacks & Callbacks)
 {
 	// add the element
-	EbmlElement *NewElt = &(Callbacks.Create());
+	EbmlElement *NewElt = &EBML_INFO_CREATE(Callbacks);
 	if (NewElt == NULL)
 		return NULL;
 
@@ -409,11 +409,11 @@ void EbmlMaster::Read(EbmlStream & inDataStream, const EbmlSemanticContext & sCo
 			}
 		}
 		ElementList.clear();
-		uint64 MaxSizeToRead = Size;
+		uint64 MaxSizeToRead = GetSize();
 
 		// read blocks and discard the ones we don't care about
 		if (MaxSizeToRead > 0) {
-			inDataStream.I_O().setFilePointer(SizePosition + SizeLength, seek_beginning);
+			inDataStream.I_O().setFilePointer(GetSizePosition() + GetSizeLength(), seek_beginning);
 			ElementLevelA = inDataStream.FindNextElement(sContext, UpperEltFound, MaxSizeToRead, AllowDummyElt);
 			while (ElementLevelA != NULL && MaxSizeToRead > 0 && UpperEltFound <= 0) {
 				MaxSizeToRead = GetEndPosition() - ElementLevelA->GetEndPosition(); // even if it's the default value
@@ -424,10 +424,10 @@ void EbmlMaster::Read(EbmlStream & inDataStream, const EbmlSemanticContext & sCo
 					// more logical to do it afterward
 					ElementList.push_back(ElementLevelA);
 
-					ElementLevelA->Read(inDataStream, ElementLevelA->Generic().Context, UpperEltFound, FoundElt, AllowDummyElt, ReadFully);
+					ElementLevelA->Read(inDataStream, EBML_CONTEXT(ElementLevelA), UpperEltFound, FoundElt, AllowDummyElt, ReadFully);
 
 					// just in case
-					ElementLevelA->SkipData(inDataStream, ElementLevelA->Generic().Context);
+					ElementLevelA->SkipData(inDataStream, EBML_CONTEXT(ElementLevelA));
 				}
 
 				if (UpperEltFound > 0) {
@@ -455,16 +455,18 @@ void EbmlMaster::Read(EbmlStream & inDataStream, const EbmlSemanticContext & sCo
 			}
 		}
 	processCrc:
-		for (Index=0; Index<ElementList.size(); Index++) {
-			if (ElementList[Index]->Generic().GlobalId == EbmlCrc32::ClassInfos.GlobalId) {
+        EBML_MASTER_ITERATOR Itr;
+        for (Itr = ElementList.begin(); Itr != ElementList.end();) {
+			if ((EbmlId)(*(*Itr)) == EBML_ID(EbmlCrc32)) {
 				bChecksumUsed = true;
 				// remove the element
-				Checksum = *(static_cast<EbmlCrc32*>(ElementList[Index]));
-				delete ElementList[Index];
-				Remove(Index--);
+				Checksum = *(static_cast<EbmlCrc32*>(*Itr));
+				delete *Itr;
+				Remove(Itr);
 			}
+            else ++Itr;
 		}
-		bValueIsSet = true;
+		SetValueIsSet();
 	}
 }
 
@@ -473,13 +475,23 @@ void EbmlMaster::Remove(size_t Index)
 	if (Index < ElementList.size()) {
 		std::vector<EbmlElement *>::iterator Itr = ElementList.begin();
 		while (Index-- > 0) {
-			Itr++;
+			++Itr;
 		}
 
 		ElementList.erase(Itr);
 	}
 }
 
+void EbmlMaster::Remove(EBML_MASTER_ITERATOR & Itr)
+{
+	ElementList.erase(Itr);
+}
+
+void EbmlMaster::Remove(EBML_MASTER_RITERATOR & Itr)
+{
+	ElementList.erase(Itr.base());
+}
+
 bool EbmlMaster::VerifyChecksum() const
 {
 	if (!bChecksumUsed)
@@ -488,7 +500,7 @@ bool EbmlMaster::VerifyChecksum() const
 	EbmlCrc32 aChecksum;
 	/// \todo remove the Checksum if it's in the list
 	/// \todo find another way when not all default values are saved or (unknown from the reader !!!)
-	MemIOCallback TmpBuf(Size - 6);
+	MemIOCallback TmpBuf(GetSize() - 6);
 	for (size_t Index = 0; Index < ElementList.size(); Index++) {
 		(ElementList[Index])->Render(TmpBuf, true, false, true);
 	}
diff --git a/src/EbmlSInteger.cpp b/src/EbmlSInteger.cpp
index b53c1eb..4f3704b 100644
--- a/src/EbmlSInteger.cpp
+++ b/src/EbmlSInteger.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This library is free software; you can redistribute it and/or
 ** modify it under the terms of the GNU Lesser General Public
@@ -42,10 +42,10 @@ EbmlSInteger::EbmlSInteger()
  :EbmlElement(DEFAULT_INT_SIZE, false)
 {}
 
-EbmlSInteger::EbmlSInteger(const int64 aDefaultValue)
+EbmlSInteger::EbmlSInteger(int64 aDefaultValue)
  :EbmlElement(DEFAULT_INT_SIZE, true), Value(aDefaultValue)
 {
-	DefaultIsSet = true;
+	SetDefaultIsSet();
 }
 
 EbmlSInteger::EbmlSInteger(const EbmlSInteger & ElementToClone)
@@ -58,79 +58,87 @@ EbmlSInteger::EbmlSInteger(const EbmlSInteger & ElementToClone)
 /*!
 	\todo handle exception on errors
 */
-uint32 EbmlSInteger::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlSInteger::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
 	binary FinalData[8]; // we don't handle more than 64 bits integers
 	unsigned int i;
 	
-	if (SizeLength > 8)
+	if (GetSizeLength() > 8)
 		return 0; // integer bigger coded on more than 64 bits are not supported
 	
 	int64 TempValue = Value;
-	for (i=0; i<Size;i++) {
-		FinalData[Size-i-1] = binary(TempValue & 0xFF);
+	for (i=0; i<GetSize();i++) {
+		FinalData[GetSize()-i-1] = binary(TempValue & 0xFF);
 		TempValue >>= 8;
 	}
 	
-	output.writeFully(FinalData,Size);
+	output.writeFully(FinalData,GetSize());
 
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlSInteger::UpdateSize(bool bKeepIntact, bool bForceRender)
+uint64 EbmlSInteger::UpdateSize(bool bWithDefault, bool bForceRender)
 {
-	if (!bKeepIntact && IsDefaultValue())
+	if (!bWithDefault && IsDefaultValue())
 		return 0;
 
 	if (Value <= 0x7F && Value >= (-0x80)) {
-		Size = 1;
+		SetSize_(1);
 	} else if (Value <= 0x7FFF && Value >= (-0x8000)) {
-		Size = 2;
+		SetSize_(2);
 	} else if (Value <= 0x7FFFFF && Value >= (-0x800000)) {
-		Size = 3;
+		SetSize_(3);
 	} else if (Value <= 0x7FFFFFFF && Value >= (-0x80000000)) {
-		Size = 4;
+		SetSize_(4);
 	} else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFF) &&
 		   Value >= EBML_PRETTYLONGINT(-0x8000000000)) {
-		Size = 5;
+		SetSize_(5);
 	} else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFFFF) &&
 		   Value >= EBML_PRETTYLONGINT(-0x800000000000)) {
-		Size = 6;
+		SetSize_(6);
 	} else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFFFFFF) &&
 		   Value >= EBML_PRETTYLONGINT(-0x80000000000000)) {
-		Size = 7;
+		SetSize_(7);
 	} else {
-		Size = 8;
+		SetSize_(8);
 	}
 
-	if (DefaultSize > Size) {
-		Size = DefaultSize;
+	if (GetDefaultSize() > GetSize()) {
+		SetSize_(GetDefaultSize());
 	}
 
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlSInteger::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlSInteger::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
 	if (ReadFully != SCOPE_NO_DATA)
 	{
 		binary Buffer[8];
-		input.readFully(Buffer, Size);
+		input.readFully(Buffer, GetSize());
 		
 		if (Buffer[0] & 0x80)
 			Value = -1; // this is a negative value
 		else
 			Value = 0; // this is a positive value
 		
-		for (unsigned int i=0; i<Size; i++)
+		for (unsigned int i=0; i<GetSize(); i++)
 		{
 			Value <<= 8;
 			Value |= Buffer[i];
 		}
-		bValueIsSet = true;
+		SetValueIsSet();
 	}
 
-	return Size;
+	return GetSize();
+}
+
+bool EbmlSInteger::IsSmallerThan(const EbmlElement *Cmp) const
+{
+	if (EbmlId(*this) == EbmlId(*Cmp))
+		return this->Value < static_cast<const EbmlSInteger *>(Cmp)->Value;
+	else
+		return false;
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlStream.cpp b/src/EbmlStream.cpp
index 74e505b..2ad6dd1 100644
--- a/src/EbmlStream.cpp
+++ b/src/EbmlStream.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
diff --git a/src/EbmlString.cpp b/src/EbmlString.cpp
index 9a659dc..7eec783 100644
--- a/src/EbmlString.cpp
+++ b/src/EbmlString.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -42,22 +42,22 @@ START_LIBEBML_NAMESPACE
 EbmlString::EbmlString()
  :EbmlElement(0, false)
 {
-	DefaultSize = 0;
+	SetDefaultSize(0);
 /* done automatically	
-	Size = Value.length();
-	if (DefaultSize > Size)
-		Size = DefaultSize;*/
+	SetSize_(Value.length());
+	if (GetDefaultSize() > GetSize())
+		SetSize_(GetDefaultSize());*/
 }
 
 EbmlString::EbmlString(const std::string & aDefaultValue)
  :EbmlElement(0, true), Value(aDefaultValue), DefaultValue(aDefaultValue)
 {
-	DefaultSize = 0;
-	DefaultIsSet = true;
+	SetDefaultSize(0);
+	SetDefaultIsSet();
 /* done automatically	
-	Size = Value.length();
-	if (DefaultSize > Size)
-		Size = DefaultSize;*/
+	SetSize_(Value.length());
+	if (GetDefaultSize() > GetSize())
+		SetSize_(GetDefaultSize());*/
 }
 
 /*!
@@ -70,80 +70,94 @@ EbmlString::EbmlString(const EbmlString & ElementToClone)
 {
 }
 
+void EbmlString::SetDefaultValue(std::string & aValue)
+{
+    assert(!DefaultISset());
+    DefaultValue = aValue;
+    SetDefaultIsSet();
+}
+
+const std::string & EbmlString::DefaultVal() const
+{
+    assert(DefaultISset());
+    return DefaultValue;
+}
+
+
 /*!
 	\todo handle exception on errors
 */
-uint32 EbmlString::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlString::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
-	uint32 Result;
+	filepos_t Result;
 	output.writeFully(Value.c_str(), Value.length());
 	Result = Value.length();
 	
-	if (Result < DefaultSize) {
+	if (Result < GetDefaultSize()) {
 		// pad the rest with 0
-		binary *Pad = new binary[DefaultSize - Result];
+		binary *Pad = new binary[GetDefaultSize() - Result];
 		if (Pad == NULL)
 		{
 			return Result;
 		}
-		memset(Pad, 0x00, DefaultSize - Result);
-		output.writeFully(Pad, DefaultSize - Result);
-		Result = DefaultSize;
+		memset(Pad, 0x00, GetDefaultSize() - Result);
+		output.writeFully(Pad, GetDefaultSize() - Result);
+		Result = GetDefaultSize();
 		delete [] Pad;
 	}
 	
 	return Result;
 }
 
-EbmlString & EbmlString::operator=(const std::string NewString)
+EbmlString & EbmlString::operator=(const std::string & NewString)
 {
 	Value = NewString;
-	bValueIsSet = true;
+	SetValueIsSet();
 /* done automatically	
-	Size = Value.length();
-	if (DefaultSize > Size)
-		Size = DefaultSize;*/
+	SetSize_(Value.length());
+	if (GetDefaultSize() > GetSize())
+		SetSize_(GetDefaultSize());*/
 	return *this;
 }
 
-uint64 EbmlString::UpdateSize(bool bKeepIntact, bool bForceRender)
+uint64 EbmlString::UpdateSize(bool bWithDefault, bool bForceRender)
 {
-	if (!bKeepIntact && IsDefaultValue())
+	if (!bWithDefault && IsDefaultValue())
 		return 0;
 
-	if (Value.length() < DefaultSize) {
-		Size = DefaultSize;
+	if (Value.length() < GetDefaultSize()) {
+		SetSize_(GetDefaultSize());
 	} else {
-		Size = Value.length();
+		SetSize_(Value.length());
 	}
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlString::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlString::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
 	if (ReadFully != SCOPE_NO_DATA)
 	{
-		if (Size == 0) {
+		if (GetSize() == 0) {
 			Value = "";
-			bValueIsSet = true;
+			SetValueIsSet();
 		} else {
-			char *Buffer = new char[Size + 1];
+			char *Buffer = new char[GetSize() + 1];
 			if (Buffer == NULL) {
 				// unable to store the data, skip it
-				input.setFilePointer(Size, seek_current);
+				input.setFilePointer(GetSize(), seek_current);
 			} else {
-				input.readFully(Buffer, Size);
-				if (Buffer[Size-1] != '\0') {
-					Buffer[Size] = '\0';
+				input.readFully(Buffer, GetSize());
+				if (Buffer[GetSize()-1] != '\0') {
+					Buffer[GetSize()] = '\0';
 				}
 				Value = Buffer;
 				delete [] Buffer;
-				bValueIsSet = true;
+				SetValueIsSet();
 			}
 		}
 	}
 
-	return Size;
+	return GetSize();
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlSubHead.cpp b/src/EbmlSubHead.cpp
index 1e76c90..08ca47e 100644
--- a/src/EbmlSubHead.cpp
+++ b/src/EbmlSubHead.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -38,28 +38,12 @@
 
 START_LIBEBML_NAMESPACE
 
-EbmlId EVersion_TheId            (0x4286, 2);
-EbmlId EReadVersion_TheId        (0x42F7, 2);
-EbmlId EMaxIdLength_TheId        (0x42F2, 2);
-EbmlId EMaxSizeLength_TheId      (0x42F3, 2);
-EbmlId EDocType_TheId            (0x4282, 2);
-EbmlId EDocTypeVersion_TheId     (0x4287, 2);
-EbmlId EDocTypeReadVersion_TheId (0x4285, 2);
-
-const EbmlCallbacks EVersion::ClassInfos(EVersion::Create,               EVersion_TheId,        "EBMLVersion",                        EVersion_Context);
-const EbmlCallbacks EReadVersion::ClassInfos(EReadVersion::Create,       EReadVersion_TheId,    "EBMLReadVersion",                    EReadVersion_Context);
-const EbmlCallbacks EMaxIdLength::ClassInfos(EMaxIdLength::Create,       EMaxIdLength_TheId,    "EBMLMaxIdLength",                    EMaxIdLength_Context);
-const EbmlCallbacks EMaxSizeLength::ClassInfos(EMaxSizeLength::Create,   EMaxSizeLength_TheId,  "EBMLMaxSizeLength",                  EMaxSizeLength_Context);
-const EbmlCallbacks EDocType::ClassInfos(EDocType::Create,               EDocType_TheId,        "EBMLDocType",                        EDocType_Context);
-const EbmlCallbacks EDocTypeVersion::ClassInfos(EDocTypeVersion::Create, EDocTypeVersion_TheId, "EBMLDocTypeVersion",                 EDocTypeVersion_Context);
-const EbmlCallbacks EDocTypeReadVersion::ClassInfos(EDocTypeReadVersion::Create, EDocTypeReadVersion_TheId, "EBMLDocTypeReadVersion", EDocTypeReadVersion_Context);
-
-const EbmlSemanticContext EVersion_Context        = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EVersion::ClassInfos);
-const EbmlSemanticContext EReadVersion_Context    = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EReadVersion::ClassInfos);
-const EbmlSemanticContext EMaxIdLength_Context    = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EMaxIdLength::ClassInfos);
-const EbmlSemanticContext EMaxSizeLength_Context  = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EMaxSizeLength::ClassInfos);
-const EbmlSemanticContext EDocType_Context        = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EDocType::ClassInfos);
-const EbmlSemanticContext EDocTypeVersion_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EDocTypeVersion::ClassInfos);
-const EbmlSemanticContext EDocTypeReadVersion_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EDocTypeReadVersion::ClassInfos);
+DEFINE_EBML_UINTEGER_DEF(EVersion,            0x4286, 2, EbmlHead, "EBMLVersion", 1);
+DEFINE_EBML_UINTEGER_DEF(EReadVersion,        0x42F7, 2, EbmlHead, "EBMLReadVersion", 1);
+DEFINE_EBML_UINTEGER_DEF(EMaxIdLength,        0x42F2, 2, EbmlHead, "EBMLMaxIdLength", 4);
+DEFINE_EBML_UINTEGER_DEF(EMaxSizeLength,      0x42F3, 2, EbmlHead, "EBMLMaxSizeLength", 8);
+DEFINE_EBML_STRING_DEF  (EDocType,            0x4282, 2, EbmlHead, "EBMLDocType", "matroska");
+DEFINE_EBML_UINTEGER_DEF(EDocTypeVersion,     0x4287, 2, EbmlHead, "EBMLDocTypeVersion", 1);
+DEFINE_EBML_UINTEGER_DEF(EDocTypeReadVersion, 0x4285, 2, EbmlHead, "EBMLDocTypeReadVersion", 1);
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlUInteger.cpp b/src/EbmlUInteger.cpp
index f153c5b..5bc1415 100644
--- a/src/EbmlUInteger.cpp
+++ b/src/EbmlUInteger.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -44,10 +44,10 @@ EbmlUInteger::EbmlUInteger()
  :EbmlElement(DEFAULT_UINT_SIZE, false)
 {}
 
-EbmlUInteger::EbmlUInteger(const uint64 aDefaultValue)
+EbmlUInteger::EbmlUInteger(uint64 aDefaultValue)
  :EbmlElement(DEFAULT_UINT_SIZE, true), Value(aDefaultValue), DefaultValue(aDefaultValue)
 {
-	DefaultIsSet = true;
+	SetDefaultIsSet();
 }
 
 EbmlUInteger::EbmlUInteger(const EbmlUInteger & ElementToClone)
@@ -57,74 +57,96 @@ EbmlUInteger::EbmlUInteger(const EbmlUInteger & ElementToClone)
 {
 }
 
+void EbmlUInteger::SetDefaultValue(uint64 aValue)
+{
+    assert(!DefaultISset());
+    DefaultValue = aValue;
+    SetDefaultIsSet();
+}
+
+const uint64 EbmlUInteger::DefaultVal() const
+{
+    assert(DefaultISset());
+    return DefaultValue;
+}
+
+
 /*!
 	\todo handle exception on errors
 */
-uint32 EbmlUInteger::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlUInteger::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
 	binary FinalData[8]; // we don't handle more than 64 bits integers
 	
-	if (SizeLength > 8)
+	if (GetSizeLength() > 8)
 		return 0; // integer bigger coded on more than 64 bits are not supported
 	
 	uint64 TempValue = Value;
-	for (unsigned int i=0; i<Size;i++) {
-		FinalData[Size-i-1] = TempValue & 0xFF;
+	for (unsigned int i=0; i<GetSize();i++) {
+		FinalData[GetSize()-i-1] = TempValue & 0xFF;
 		TempValue >>= 8;
 	}
 	
-	output.writeFully(FinalData,Size);
+	output.writeFully(FinalData,GetSize());
 
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlUInteger::UpdateSize(bool bKeepIntact, bool bForceRender)
+uint64 EbmlUInteger::UpdateSize(bool bWithDefault, bool bForceRender)
 {
-	if (!bKeepIntact && IsDefaultValue())
+	if (!bWithDefault && IsDefaultValue())
 		return 0;
 
 	if (Value <= 0xFF) {
-		Size = 1;
+		SetSize_(1);
 	} else if (Value <= 0xFFFF) {
-		Size = 2;
+		SetSize_(2);
 	} else if (Value <= 0xFFFFFF) {
-		Size = 3;
+		SetSize_(3);
 	} else if (Value <= 0xFFFFFFFF) {
-		Size = 4;
+		SetSize_(4);
 	} else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFF)) {
-		Size = 5;
+		SetSize_(5);
 	} else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFFFF)) {
-		Size = 6;
+		SetSize_(6);
 	} else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFFFFFF)) {
-		Size = 7;
+		SetSize_(7);
 	} else {
-		Size = 8;
+		SetSize_(8);
 	}
 
-	if (DefaultSize > Size) {
-		Size = DefaultSize;
+	if (GetDefaultSize() > GetSize()) {
+		SetSize_(GetDefaultSize());
 	}
 
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlUInteger::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlUInteger::ReadData(IOCallback & input, ScopeMode ReadFully)
 {
 	if (ReadFully != SCOPE_NO_DATA)
 	{
 		binary Buffer[8];
-		input.readFully(Buffer, Size);
+		input.readFully(Buffer, GetSize());
 		Value = 0;
 		
-		for (unsigned int i=0; i<Size; i++)
+		for (unsigned int i=0; i<GetSize(); i++)
 		{
 			Value <<= 8;
 			Value |= Buffer[i];
 		}
-		bValueIsSet = true;
+		SetValueIsSet();
 	}
 
-	return Size;
+	return GetSize();
+}
+
+bool EbmlUInteger::IsSmallerThan(const EbmlElement *Cmp) const
+{
+	if (EbmlId(*this) == EbmlId(*Cmp))
+		return this->Value < static_cast<const EbmlUInteger *>(Cmp)->Value;
+	else
+		return false;
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlUnicodeString.cpp b/src/EbmlUnicodeString.cpp
index 9727997..aa75188 100644
--- a/src/EbmlUnicodeString.cpp
+++ b/src/EbmlUnicodeString.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -207,14 +207,14 @@ bool UTFstring::wcscmp_internal(const wchar_t *str1, const wchar_t *str2)
 EbmlUnicodeString::EbmlUnicodeString()
 :EbmlElement(0, false)
 {
-	DefaultSize = 0;
+	SetDefaultSize(0);
 }
 
 EbmlUnicodeString::EbmlUnicodeString(const UTFstring & aDefaultValue)
 :EbmlElement(0, true), Value(aDefaultValue), DefaultValue(aDefaultValue)
 {
-	DefaultSize = 0;
-	DefaultIsSet = true;
+	SetDefaultSize(0);
+	SetDefaultIsSet();
 }
 
 EbmlUnicodeString::EbmlUnicodeString(const EbmlUnicodeString & ElementToClone)
@@ -224,11 +224,25 @@ EbmlUnicodeString::EbmlUnicodeString(const EbmlUnicodeString & ElementToClone)
 {
 }
 
+void EbmlUnicodeString::SetDefaultValue(UTFstring & aValue)
+{
+    assert(!DefaultISset());
+    DefaultValue = aValue;
+    SetDefaultIsSet();
+}
+
+const UTFstring & EbmlUnicodeString::DefaultVal() const
+{
+    assert(DefaultISset());
+    return DefaultValue;
+}
+
+
 /*!
 \note limited to UCS-2
 \todo handle exception on errors
 */
-uint32 EbmlUnicodeString::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlUnicodeString::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
 	uint32 Result = Value.GetUTF8().length();
 
@@ -236,14 +250,14 @@ uint32 EbmlUnicodeString::RenderData(IOCallback & output, bool bForceRender, boo
 		output.writeFully(Value.GetUTF8().c_str(), Result);
 	}
 
-	if (Result < DefaultSize) {
+	if (Result < GetDefaultSize()) {
 		// pad the rest with 0
-		binary *Pad = new binary[DefaultSize - Result];
+		binary *Pad = new binary[GetDefaultSize() - Result];
 		if (Pad != NULL) {
-			memset(Pad, 0x00, DefaultSize - Result);
-			output.writeFully(Pad, DefaultSize - Result);
+			memset(Pad, 0x00, GetDefaultSize() - Result);
+			output.writeFully(Pad, GetDefaultSize() - Result);
 
-			Result = DefaultSize;
+			Result = GetDefaultSize();
 			delete [] Pad;
 		}
 	}
@@ -254,54 +268,54 @@ uint32 EbmlUnicodeString::RenderData(IOCallback & output, bool bForceRender, boo
 EbmlUnicodeString & EbmlUnicodeString::operator=(const UTFstring & NewString)
 {
 	Value = NewString;
-	bValueIsSet = true;
+	SetValueIsSet();
 	return *this;
 }
 
 /*!
 \note limited to UCS-2
 */
-uint64 EbmlUnicodeString::UpdateSize(bool bKeepIntact, bool bForceRender)
+uint64 EbmlUnicodeString::UpdateSize(bool bWithDefault, bool bForceRender)
 {
-	if (!bKeepIntact && IsDefaultValue())
+	if (!bWithDefault && IsDefaultValue())
 		return 0;
 
-	Size = Value.GetUTF8().length();
-	if (Size < DefaultSize)
-		Size = DefaultSize;
+	SetSize_(Value.GetUTF8().length());
+	if (GetSize() < GetDefaultSize())
+		SetSize_(GetDefaultSize());
 
-	return Size;
+	return GetSize();
 }
 
 /*!
 	\note limited to UCS-2
 */
-uint64 EbmlUnicodeString::ReadData(IOCallback & input, ScopeMode ReadFully)
+filepos_t EbmlUnicodeString::ReadData(IOCallback & input, ScopeMode ReadFully)
 {	
 	if (ReadFully != SCOPE_NO_DATA)
 	{
-		if (Size == 0) {
+		if (GetSize() == 0) {
 			Value = UTFstring::value_type(0);
-			bValueIsSet = true;
+			SetValueIsSet();
 		} else {
-			char *Buffer = new char[Size+1];
+			char *Buffer = new char[GetSize()+1];
 			if (Buffer == NULL) {
 				// impossible to read, skip it
-				input.setFilePointer(Size, seek_current);
+				input.setFilePointer(GetSize(), seek_current);
 			} else {
-				input.readFully(Buffer, Size);
-				if (Buffer[Size-1] != 0) {
-					Buffer[Size] = 0;
+				input.readFully(Buffer, GetSize());
+				if (Buffer[GetSize()-1] != 0) {
+					Buffer[GetSize()] = 0;
 				}
 
 				Value.SetUTF8(Buffer); // implicit conversion to std::string
 				delete [] Buffer;
-				bValueIsSet = true;
+				SetValueIsSet();
 			}
 		}
 	}
 
-	return Size;
+	return GetSize();
 }
 
 END_LIBEBML_NAMESPACE
diff --git a/src/EbmlVersion.cpp b/src/EbmlVersion.cpp
index 3801802..6b146a5 100644
--- a/src/EbmlVersion.cpp
+++ b/src/EbmlVersion.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
diff --git a/src/EbmlVoid.cpp b/src/EbmlVoid.cpp
index 1454b66..3b3f2f0 100644
--- a/src/EbmlVoid.cpp
+++ b/src/EbmlVoid.cpp
@@ -3,7 +3,7 @@
 **
 ** <file/class description>
 **
-** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+** Copyright (C) 2002-2010 Steve Lhomme.  All rights reserved.
 **
 ** This file is part of libebml.
 **
@@ -38,69 +38,68 @@
 
 START_LIBEBML_NAMESPACE
 
-EbmlId EbmlVoid_TheId(0xEC, 1);
-const EbmlCallbacks EbmlVoid::ClassInfos(EbmlVoid::Create, EbmlVoid_TheId, "EBMLVoid", EbmlVoid_Context);
+DEFINE_EBML_CLASS_GLOBAL(EbmlVoid, 0xEC, 1, "EBMLVoid");
 
 EbmlVoid::EbmlVoid()
 {
-	bValueIsSet = true;
+	SetValueIsSet();
 }
 
-uint32 EbmlVoid::RenderData(IOCallback & output, bool bForceRender, bool bKeepIntact)
+filepos_t EbmlVoid::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault)
 {
 	// write dummy data by 4KB chunks
 	static binary DummyBuf[4*1024];
 
-	uint64 SizeToWrite = Size;
+	uint64 SizeToWrite = GetSize();
 	while (SizeToWrite > 4*1024)
 	{
 		output.writeFully(DummyBuf, 4*1024);
 		SizeToWrite -= 4*1024;
 	}
 	output.writeFully(DummyBuf, SizeToWrite);
-	return Size;
+	return GetSize();
 }
 
-uint64 EbmlVoid::ReplaceWith(EbmlElement & EltToReplaceWith, IOCallback & output, bool ComeBackAfterward, bool bKeepIntact)
+uint64 EbmlVoid::ReplaceWith(EbmlElement & EltToReplaceWith, IOCallback & output, bool ComeBackAfterward, bool bWithDefault)
 {
-	EltToReplaceWith.UpdateSize(bKeepIntact);
-	if (HeadSize() + Size < EltToReplaceWith.GetSize() + EltToReplaceWith.HeadSize()) {
+	EltToReplaceWith.UpdateSize(bWithDefault);
+	if (HeadSize() + GetSize() < EltToReplaceWith.GetSize() + EltToReplaceWith.HeadSize()) {
 		// the element can't be written here !
-		return 0;
+		return INVALID_FILEPOS_T;
 	}
-	if (HeadSize() + Size - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() == 1) {
+	if (HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() == 1) {
 		// there is not enough space to put a filling element
-		return 0;
+		return INVALID_FILEPOS_T;
 	}
 
 	uint64 CurrentPosition = output.getFilePointer();
 
 	output.setFilePointer(GetElementPosition());
-	EltToReplaceWith.Render(output, bKeepIntact);
+	EltToReplaceWith.Render(output, bWithDefault);
 
-	if (HeadSize() + Size - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() > 1) {
+	if (HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() > 1) {
 	  // fill the rest with another void element
 	  EbmlVoid aTmp;
-	  aTmp.SetSize(HeadSize() + Size - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() - 1); // 1 is the length of the Void ID
+	  aTmp.SetSize_(HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() - 1); // 1 is the length of the Void ID
 	  int HeadBefore = aTmp.HeadSize();
-	  aTmp.SetSize(aTmp.GetSize() - CodedSizeLength(aTmp.Size, aTmp.SizeLength, aTmp.bSizeIsFinite));
+	  aTmp.SetSize_(aTmp.GetSize() - CodedSizeLength(aTmp.GetSize(), aTmp.GetSizeLength(), aTmp.IsFiniteSize()));
 	  int HeadAfter = aTmp.HeadSize();
 	  if (HeadBefore != HeadAfter) {
-		  aTmp.SetSizeLength(CodedSizeLength(aTmp.Size, aTmp.SizeLength, aTmp.bSizeIsFinite) - (HeadAfter - HeadBefore));
+		  aTmp.SetSizeLength(CodedSizeLength(aTmp.GetSize(), aTmp.GetSizeLength(), aTmp.IsFiniteSize()) - (HeadAfter - HeadBefore));
 	  }
-	  aTmp.RenderHead(output, false, bKeepIntact); // the rest of the data is not rewritten
+	  aTmp.RenderHead(output, false, bWithDefault); // the rest of the data is not rewritten
 	}
 
 	if (ComeBackAfterward) {
 		output.setFilePointer(CurrentPosition);
 	}
 
-	return Size + HeadSize();
+	return GetSize() + HeadSize();
 }
 
-uint64 EbmlVoid::Overwrite(const EbmlElement & EltToVoid, IOCallback & output, bool ComeBackAfterward, bool bKeepIntact)
+uint64 EbmlVoid::Overwrite(const EbmlElement & EltToVoid, IOCallback & output, bool ComeBackAfterward, bool bWithDefault)
 {
-//	EltToVoid.UpdateSize(bKeepIntact);
+//	EltToVoid.UpdateSize(bWithDefault);
 	if (EltToVoid.GetElementPosition() == 0) {
 		// this element has never been written
 		return 0;
@@ -115,18 +114,18 @@ uint64 EbmlVoid::Overwrite(const EbmlElement & EltToVoid, IOCallback & output, b
 	output.setFilePointer(EltToVoid.GetElementPosition());
 
 	// compute the size of the voided data based on the original one
-	Size = EltToVoid.GetSize() + EltToVoid.HeadSize() - 1; // 1 for the ID
-	Size -= CodedSizeLength(Size, SizeLength, bSizeIsFinite);
+	SetSize(EltToVoid.GetSize() + EltToVoid.HeadSize() - 1); // 1 for the ID
+	SetSize(GetSize() - CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize()));
 	// make sure we handle even the strange cases
-	//uint32 A1 = Size + HeadSize();
+	//uint32 A1 = GetSize() + HeadSize();
 	//uint32 A2 = EltToVoid.GetSize() + EltToVoid.HeadSize();
-	if (Size + HeadSize() != EltToVoid.GetSize() + EltToVoid.HeadSize()) {
-		Size--;
-		SetSizeLength(CodedSizeLength(Size, SizeLength, bSizeIsFinite) + 1);
+	if (GetSize() + HeadSize() != EltToVoid.GetSize() + EltToVoid.HeadSize()) {
+		SetSize(GetSize()-1);
+		SetSizeLength(CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize()) + 1);
 	}
 
-	if (Size != 0) {
-		RenderHead(output, false, bKeepIntact); // the rest of the data is not rewritten
+	if (GetSize() != 0) {
+		RenderHead(output, false, bWithDefault); // the rest of the data is not rewritten
 	}
 
 	if (ComeBackAfterward) {
diff --git a/src/StdIOCallback.cpp b/src/StdIOCallback.cpp
index 3b85c37..6bb43b1 100644
--- a/src/StdIOCallback.cpp
+++ b/src/StdIOCallback.cpp
@@ -28,7 +28,7 @@
 
 /*!
 	\file
-	\version \$Id: StdIOCallback.cpp 1094 2005-03-16 18:30:28Z robux4 $
+	\version \$Id: StdIOCallback.cpp 1298 2008-02-21 22:14:18Z mosu $
 	\author Steve Lhomme     <robux4 @ users.sf.net>
 	\author Moritz Bunkus <moritz @ bunkus.org>
 */
@@ -64,7 +64,7 @@ StdIOCallback::StdIOCallback(const char*Path, const open_mode aMode)
 {
 	assert(Path!=0);
 
-	char *Mode;
+	const char *Mode;
 	switch (aMode)
 	{
 	case MODE_READ:

-- 
libebml packaging



More information about the pkg-multimedia-commits mailing list