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

12/6/2010
- added: Chart.getHypedXXX and Chart.getTopXXX methods
- changed: moved Artist.getPercentageChange to MusicEntry.getPercentageChange
- added: PaginatedResult.isEmpty()

11/14/2010
- added: Geo.getMetroXXXChart methods (issue 8)
- Refactorings, code cleanup, documentation

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

11/05/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

11/04/2010
- Added trackNumber and streamId params to scrobbling classes.

10/31/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)

10/26/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.

4/22:
- fixed: Event.getStartDate() (issue 7)
- added: Event.getEndDate()

3/17:
- 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()

8/10:
- fixed: Explicitly using UTF-8 encoding now

7/31:
- changed: User.getLovedTracks now returns a PaginatedResult and accepts a page parameter

6/15:
- fixed: User.getNeighbours(user, key) was not working properly

6/12:
- added: User.getRealname() method (thanks Marko Luther)

6/26:
- added: MEGA size to ImageSize enum
- R.I.P. Michael Jackson

6/19:
- added: Event.getWebsite(), Event.getTicketSuppliers()

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

5/21:
- fixed: Library.add methods

5/14:
- changed: some methods in User changed to public

4/23:
- added: Caller.getLastResult

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

4/11:
- added: Track.getPosition (thanks again Marko Luther)

4/9:
- changed: implemented Radio 2.0 API

3/27:
- fixed: User.getInfo

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

3/10:
- added: ScrobbleCache.clearScrobbleCache
- fixed: new SubmissionData(String) ArrayIndexOutOfBoundsException

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

2/9:
- added: Radio.skipsLeft

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

1/5:
- 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.

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

12/20:
- Venue promoted to top level class
- added: Venue.search, Venue.getEvents, Venue.getPastEvents
- added: Venue.getId

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

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

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

12/5:
- added: User.getRecommendedArtists
- added: Group.getMembers

12/1:
- fixed: now playing notification UTF-8 encoding

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

11/12:
- 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)

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

11/5:
- added: User.getRecommendedEvents
- added: Library.addArtist, Library.addAlbum, Library.addTrack

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

10/18:
- added: Playlist.create

10/6:
- 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

9/28:
- fixed: Authenticator.getSession() now sends api_sig (thanks Alex Aranda)

9/25:
- fixed: MusicEntry.getPlaycount() (thanks Henrique Pinto)

9/17:
- changed: ImageSize.EXTRALARGE constant added.

9/8:
- 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. :-)