change-log for last.fm bindings. Please read with each new release.
===================================================================

4.5.2012
- added: User.getPersonalTags (issue 45)
- changed: PaginatedResult is now Iterable

24.4.2012
- added: Album#getTracks()

19.4.2012
- added: Event#getAttendanceStatus()

1.4.2012
- added: Radio.search, Radio.getPlaylist parameters (issue 41)

12.2.2012
- changed: some #getEvents methods now return a PaginatedResult instead of a Collection, accept festivalsOnly parameter

25.1.2012
- changed: Playlist#getTracks() now returns a List instead of a Collection

21.12.2011
- changed: made ResponseBuilder public (issue 29)
- fixed: DatabaseCache now works with MySQL 5, fixed text encoding bug (issue 33)

11.12.2011
- added Library.removeXXX methods

04.11.2011
- added support for "chosenByUser" parameter to track.scrobble.

12.10.2011
- added: Geo.getEvents with lat/long and distance (issue 32)
- fixed: Events without a venue specified (issue 35)

5.7.2011
- changed: Geo.getEvents now accepts limit parameter (issue 26)

31.5.2011
- changed: User.getFriends now returns PaginatedResult<User> instead of a Collection<User> (issue 24)

2.5.2011
- fixed: Tracks returned from getSimilarTracks do not include "match" attribute (issue 20)

22.2.2011
- fixed issue with empty duration elements and also different units of measure (issue 17)

27.1.2011
- added XXX.getShouts methods

2.1.2011
- documentation and code cleanup

6.12.2010
- added: Chart.getHypedXXX and Chart.getTopXXX methods
- changed: moved Artist.getPercentageChange to MusicEntry.getPercentageChange
- added: PaginatedResult.isEmpty()

14.11.2010
- added: Geo.getMetroXXXChart methods (issue 8)
- Refactorings, code cleanup, documentation

06.11.2010
- changed: Track.getTopTags() now returns a more general Collection<Tag> instead of a List<Tag>
- Refactorings

05.11.2010
- added: Artist.getCorrection
- fixed: Track.getCorrection failed if supplied artist/track are already correct or Last.fm can't supply a correction
- added: Track.unlove() and Track.unban()
- added: Tag.getInfo()
- changed: Track.getInfo() now takes a Locale parameter
- changed: Artist.getInfo(), Track.getInfo(), Tag.getInfo() now don't pass a language parameter to the webservice if no Locale was specified,
	instead of the default Locale
- added: Geo.getMetros() and Geo.Metro class (issue 8)
- added: ItemFactory, ItemFactoryBuilder, ResponseBuilder as well as several implementations of ItemFactory to help remove duplicate code
- changed: Tag.getSimilar() now returns a Collection of Tags instead of Strings
- changed: Tag.getTopTags() now returns a more general Collection<Tag> instead of a List<Tag>
- changed: Tag.search() now returns a Collection of Tags instead of Strings
- Refactorings in various classes to make use of the new ResponseBuilder
- updated ant build script

04.11.2010
- Added trackNumber and streamId params to scrobbling classes.

31.10.2010
- Added license info to all files, updated license.txt
- Some documentation changes
- fixed: StringUtilities.isMD5() where a string was recognized as possible md5 encoded
- added: Scrobbler.setHandshakeURL() (issue 13)
- added: Track.getCorrection() (issue 14)
- added: Group.getHype() and Artist.getPercentageChange() (issue 9)
- added: Album.getTopTags()
- added: User.getNewReleases() and User.getBannedTracks() (issue 15)
- fixed: Result.getContentElement() returned the wrong element on Android (see issue 12)

26.10.2010
- Added support for scrobbling and now playing requests using the new Last.fm Scrobble 2.0 API (Adrian Woodhead).
- Deprecated 1.2.x scrobble protocol classes.

22.4:
- fixed: Event.getStartDate() (issue 7)
- added: Event.getEndDate()

17.3:
- changed: User.getRecentTracks returns PaginatedResult (issue 6)
- added: MusicEntry.getUserPlaycount(): returns user's playcount for Album/Artist/Tracks, when a username was supplied
	on the respective new getInfo() calls.
- changed: Session now has private default constructor to precent accidentally instantiation. Use the static methods
	provided in the Authenticator class.
- changed: User.getInfo() changed to an unauthenticated call, now takes username parameter
- added: Album.getBuylinks(), Track.getBuylinks() and the BuyLink class
- added: Artist.getPastEvents()
- added: User.getArtistTracks()
- added: Venue.getPhonenumber(), Venue.getWebsite()
- added: Venue.getImageUrl()

10.8:
- fixed: Explicitly using UTF-8 encoding now

31.7:
- changed: User.getLovedTracks now returns a PaginatedResult and accepts a page parameter

15.6:
- fixed: User.getNeighbours(user, key) was not working properly

12.6:
- added: User.getRealname() method (thanks Marko Luther)

26.6:
- added: MEGA size to ImageSize enum
- R.I.P. Michael Jackson

19.6:
- added: Event.getWebsite(), Event.getTicketSuppliers()

18.6:
- fixed: NPE in Track.search() w/o artist parameter

21.5:
- fixed: Library.add methods

14.5:
- changed: some methods in User changed to public

23.4:
- added: Caller.getLastResult

13.4:
- changed: User() constructor now private, was public
- added: Track.getLastFmInfo

11.4:
- added: Track.getPosition (thanks again Marko Luther)

9.4:
- changed: implemented Radio 2.0 API

27.3:
- fixed: User.getInfo

20.3:
- added: Event.getAttendees
- added: Artist.getImages
- added: Image class, ImageHolder.availableSizes()
- added: User.shout, Artist.shout

10.3:
- added: ScrobbleCache.clearScrobbleCache
- fixed: new SubmissionData(String) ArrayIndexOutOfBoundsException

28.2:
- added: ScrobbleCache
- added: SubmissionData.toString() SubmissionData(String)
- added: FileSystemCache now supports caching scrobbles through the ScrobbleCache interface

9.2:
- added: Radio.skipsLeft

5.2:
- added: Session.createSession to restore sessions
- changed: Radio.handshake and Authenticator.getMobileSession now accept 32-character MD5 string as password parameter

5.1:
- added: DatabaseCache - Cache implementation that stores into any jdbc database
- added: DomElement.getTagName method

1.1:
- changed: Cache.createCacheEntryName now returns md5 hashes by default.

30.12:
- fixed: StringUtilities.cleanUp not replacing * lead to caching error (thanks Andrew Collins)

20.12:
- Venue promoted to top level class
- added: Venue.search, Venue.getEvents, Venue.getPastEvents
- added: Venue.getId

11.12:
- added: Track.getInfo recognizes duration if available
- fixed: Track.getInfo for tracks with no album (thanks Robin Fernandes)
- ant build now includes debug information

10.12:
- changed: getTopTags methods now return list of Tag (thanks Rudolf Mayer)
- fixed: FileSystemCache directory is created lazily
- happy birthday yet another K. ;-)

6.12:
- changed license to 2-clause BSD
- fixed: User.getInfo tests if age element is present

5.12:
- added: User.getRecommendedArtists
- added: Group.getMembers

1.12:
- fixed: now playing notification UTF-8 encoding

25.11:
- fixed: caching may fail due to invalid filename characters, added StringUtilities.cleanUp (thanks Jakob Frank)

12.11:
- added: Basic cache implementation in net.roarsoftware.lastfm.cache and Caller.setCache (thanks Martin Chorley for
his cache implementation I built upon)
- added: Rating ability to Scrobbler/SubmissionData (thanks Lukasz Wisniewski)

10.11:
- added: Artist.getEvents (thanks Idan Zohar)
- added: Artist.share
- fixed: Event.getStartDate now contains event's start time if available (thanks Idan Zohar)

5.11:
- added: User.getRecommendedEvents
- added: Library.addArtist, Library.addAlbum, Library.addTrack

24.10:
- added: localised Artist.getInfo method
- fixed: Playlist.create
- warning: Artist.getInfo => getWikiLastChanged may return null if locale neither english nor default.

18.10:
- added: Playlist.create

6.10:
- added: Album.search method
- added: Tag.getWeeklyArtistChart method
- added: internal Chart.getChart, Chart.getWeeklyChartList, Chart.getWeeklyChartListAsCharts methods
- changed: refactored all Chart methods to use the new internal Chart.getXXX methods

28.9:
- fixed: Authenticator.getSession() now sends api_sig (thanks Alex Aranda)

25.9:
- fixed: MusicEntry.getPlaycount() (thanks Henrique Pinto)

17.9:
- changed: ImageSize.EXTRALARGE constant added.

8.9:
- changed: for consistency reasons order of parameters in Track are now always: artist, track/mbid
- changed: biography loading and accessor methods now renamed to getWikiXXX() and made available in MusicEntry
- added: Track.getInfo
- fixed: StringUtilities.isMbid
- added: Event.share
- ps: happy birthday, K. :-)