Release 0.6.3

	core:
	 * Fix crash in extra debug code

	glib frontend:
	 * Make sure passwords are passed correctly to poppler core

	Qt frontend:
	 * Fix crash on documents that specify an empty date
	
	build system:
	 * Disable gtk tests if the user disabled glib frontend

Release 0.6.2

	poppler core:
	 * Fix CVE-2007-4352, CVE-2007-5392 and CVE-2007-5393
	 * Fix a crash on documents with wrong CCITTFaxStream
	 * Fix a crash in the Cairo renderer with invalid embedded fonts
	 * Fix a crash with invalid TrueType fonts
	 * Check if font is inside the clip area before rendering
	   it to a temporary bitmap in the Splash renderer. Fixes crashes on
	   incorrect documents
	 * Do not use exit(1) on DCTStream errors
	 * Detect form fields at any depth level
	 * Do not generate appearance stream for radio buttons that are not active
	 * mingw fixes
	
	build system:
	 * Require fontconfig >= 2.0
	 * builddir != srcdir fixes
	
	Qt4 frontend:
	 * Improved documentation
	
	misc:
	 * Fix FSF address

Release 0.6.1

	poppler core:
	 * Fix printing with different x and y scale
	 * Fix crash when Form Fields array contains references to non existent objects
	 * Fix crash in CairoOutputDev::drawMaskedImage()
	 * Fix embedded file description not working on some cases
	
	Qt4 frontend:
	 * Fix printing issue
	 * Avoid double free
	 * Fix memory leak when dealing with embedded files
	
	glib frontend:
	 * Fix build with --disable-cairo-output
	 * Do not return unknown field type for signature form fields
	
	build system:
	 * Support automake-1.10
	 * More compatible sh code in qt.m4
	
	utils:
	 * Fix build on Sun Studio compiler

Release 0.6

	- CairoOutputDev fixes
	- Allow pdftoppm to read/write from stdin/stdout
	- API work on Qt4 frontend
	- Fix pdfimages produces inverted image for black & white image
	- Fix error on the NFKC text matching routine
	- Add support for word and line selections
	- Do not enforce %%EOF at the end of file
	- Pad zeroes instead of aborting when rendering 1-bit images
	  and the stream is too short
	- Update glib bindings documentation

Release 0.5.91 (0.6 Release Candidate 2)

	- Various memory leaks fixed
	- Compile with --enable-fixedpoint. Bug #11110
	- Header cleanup
	- Remove dependency on debugxml. Bug #11187
	- Allow access to document metadata in glib and qt4 frontends
	- Several glib API frontend improvements
	- Fix crash on accessing embedded files
	- Build on Sun Force compiler
	- Render '*' instead of the actual content in password form fields
	- Fix pdftohtml complex output. Bug #9746 and #11610
	- Windows build fixes
	- Improve Japanese font support. Bug #11413
	- Do not exit the program on files that confuse libjpeg
	- Update required cairo version to 1.4
	- Fix CVE-2007-3387

Release 0.5.9 (0.6 Release Candidate)

	- Merge xpdf 3.02 changes
	- Qt4 frontend is not marked anymore as unstable
	- Support for Sound objects
	- Support for Opening/Closing page actions 
	- Support for page duration
	- Improve PS Tokenizer performance thanks to Scott Turner
	- Various speed ups by Krzysztof Kowalczyk
	- Beginning of Interactive Form support by Julien Rebetez
	- xpdfrc is no longer used for anything
	- Add AbiWord output device and pdftoabw program by Jauco Noordzij
	- Fix security issue MOAB-06-01-2007
	- Lots of bugs fixed

Release 0.5.4

	- Automatically read in CJK encoding files if they're
          installed (#2984, #7105, #7093).  This works with the new
          poppler-data package.
	- Speed ups by Krzysztof Kowalczyk (#8112)
	- Patch from Dom Lachowicz to let the utils take input on stdin.
	- Bugs fixed (#8182, #4649, #7906, #8048, #7113, #4515, #3948,
          #7924, #7780, #7646, #6948, #7788, #7661, #7005)

Release 0.5.3

	- Add poppler as a private requires of poppler-glib.
	- Allow CairoFont creation to fail more gracefully (#4030).
	- Back out the rest of krh's type3 font work.
	- Revert splashModeRGB8 changes.
 	- Add missing poppler-annotation-helper.h.

Release 0.5.2

	- Much improved Qt bindings (Albert Astals Cid).
	- Cairo backend now supports masked images (Jeff Muizelaar, #6174).
	- Patches from Kouhei Sutou to make glib bindings more
	  language binding friendly (#6907, #6897, #6899, #6905).
	- Search now works with ligatures (Ed Catmull, #2929).
	- The glib bindings now has an entry point to render to a cairo_t.
	- GCC 4.1 and MSVC compilation fixes.
	- Memory leaks plugged: #6908, #6947, #6765, #6764, #6187
	- Misc bug fixes: #6984, #6896, #6913, #6926, #4481, #5951,
	  #6551, #6500, #6492, #6454, #6079, #6167.

Release 0.5.1

	- Support for embedded files.
	- Handle 0-width lines correctly.
	- Avoid external file use when opening fonts.
	- Only use vector fonts returned from fontconfig (#5758).
	- Fix scaled 1x1 pixmaps use for drawing lines (#3387).
	- drawSoftMaskedImage support in cairo backend.
	- Misc bug fixes: #5922, #5946, #5749, #5952, #4030, #5420.

Release 0.5.0

	- Font matching code for non embedded fonts now use fontconfig
          instead of hard coded list of fonts.
	- Merge in Xpdf 3.01 changes.
	- Add command line tools from Xpdf.
	- Make install of Xpdf header files ./configure'able.

Release 0.4.0

	- Real text selection.
	- API breakage in glib wrapper: dropping dest_x and dest_y
	  arguments from poppler_page_render_to_pixbuf().

Release 0.3.3

	- New glib API to get document font information (Marco).
	- More document properties available as glib properties (Emil
	  Soleyman-Zomalan, #3359)
	- Optimize color conversion for images.
	- Support for constant opacity.
	- Fix problems with pkg-config files.
	- Bugs fixes: #3491, #2911, #3362, #3340, #3265, #3239, #3396.

Release 0.3.2

	- New API to get poppler version and backend type. 
	- Various font fixes from Albert Astals Cid.
	- Update to cairo 0.5.0 API, including better font support.
	- Meta data for the glib binding.

Release 0.3.1

	- Add qt/poppler-private.h to SOURCES
	- Jeff's path to use zlib instead of builtin decompression.
	- Bug fixes: #2934, segfault on invalid links, #3114

Release 0.3.0

	- First cut at qt wrapper, including a getText() method for
	  getting text from a page.
	- More glib functionality: meta data, set page orientation,
	  print to PS
	- Performance fixes for glib cairo
	- Bug fixes

Release 0.2.0  (Tue Apr  5 12:32:10 EDT 2005)

	- Add glib wrapper for poppler, which will use cairo rendering
	  if available
	- Support for page labels
	- configure and build fixes.

Release 0.1.2  (Wed Mar  9 10:45:58 EST 2005)

	- cairo optimizations and fixes from Jeff Muizelaar
	- Bump cairo requirement to 0.4
	- Make cairo and gtk checks fail gracefully

Release 0.1.1

	- Fix issues with installed header files including config.h
	- Fix a couple of typos in pkg-config files
	- Install splash and cairo header files when necessary

Release 0.1 - no date yet

	- First release
	- More NEWS here
