<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -22,16 +22,16 @@ enum album_methods
 
 static const lfmget primary_methods[] = 
 {
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;name&quot;}, parse_utf8},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;artist&quot;}, parse_utf8},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;mbid&quot;}, parse_utf8},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;url&quot;}, parse_url},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;releasedate&quot;}, parse_url},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;image[size=small]&quot;}, parse_url},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;image[size=medium]&quot;}, parse_url},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;image[size=large]&quot;}, parse_url},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;listeners&quot;}, parse_guint},
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;playcount&quot;}, parse_guint},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;name&quot;}, DATA_UTF8},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;artist&quot;}, DATA_UTF8},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;mbid&quot;}, DATA_UTF8},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;url&quot;}, DATA_URL},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;releasedate&quot;}, DATA_URL},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;image[size=small]&quot;}, DATA_URL},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;image[size=medium]&quot;}, DATA_URL},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;image[size=large]&quot;}, DATA_URL},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;listeners&quot;}, DATA_UINT},
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;playcount&quot;}, DATA_UINT},
 };
 
 enum primary_info
@@ -50,7 +50,7 @@ enum primary_info
 
 static const lfmget related_methods[] = 
 {
-	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;toptags&quot;, &quot;tag&quot;}, parse_tags}
+	{&amp;album_method_declarations[get_info], {&quot;album&quot;, &quot;toptags&quot;, &quot;tag&quot;}, DATA_TAGS}
 };
 
 enum related_info</diff>
      <filename>album.c</filename>
    </modified>
    <modified>
      <diff>@@ -37,18 +37,18 @@ enum artist_methods
 
 static const lfmget primary_methods[] = 
 {
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;name&quot;}, parse_utf8},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;mbid&quot;}, parse_utf8},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;url&quot;}, parse_url},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;image[size=small]&quot;}, parse_url},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;image[size=medium]&quot;}, parse_url},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;image[size=large]&quot;}, parse_url},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;streamable&quot;}, parse_boolean},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;stats&quot;, &quot;listeners&quot;}, parse_guint},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;stats&quot;, &quot;plays&quot;}, parse_guint},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;bio&quot;, &quot;published&quot;}, parse_date_time},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;bio&quot;, &quot;summary&quot;}, parse_utf8},
-	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;bio&quot;, &quot;content&quot;}, parse_utf8},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;name&quot;}, DATA_UTF8},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;mbid&quot;}, DATA_UTF8},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;url&quot;}, DATA_URL},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;image[size=small]&quot;}, DATA_URL},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;image[size=medium]&quot;}, DATA_URL},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;image[size=large]&quot;}, DATA_URL},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;streamable&quot;}, DATA_BOOLEAN},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;stats&quot;, &quot;listeners&quot;}, DATA_UINT},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;stats&quot;, &quot;plays&quot;}, DATA_UINT},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;bio&quot;, &quot;published&quot;}, DATA_DATE_TIME},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;bio&quot;, &quot;summary&quot;}, DATA_UTF8},
+	{&amp;artist_method_declarations[get_info], {&quot;artist&quot;, &quot;bio&quot;, &quot;content&quot;}, DATA_UTF8},
 };
 
 enum primary_info
@@ -69,14 +69,14 @@ enum primary_info
 
 lfmget related_methods[] =
 {
-	{&amp;artist_method_declarations[get_events],          {&quot;events&quot;, &quot;event&quot;}, parse_events},
-	{&amp;artist_method_declarations[get_similar_artists], {&quot;similarartists&quot;, &quot;artist&quot;}, parse_artists},
-	{&amp;artist_method_declarations[get_info],            {&quot;artist&quot;, &quot;similar&quot;, &quot;artist&quot;}, parse_artists},
-	{&amp;artist_method_declarations[get_info],            {&quot;artist&quot;, &quot;tags&quot;, &quot;tag&quot;}, parse_tags},
-	{&amp;artist_method_declarations[get_top_albums],      {&quot;topalbums&quot;, &quot;album&quot;}, parse_albums},
-	{&amp;artist_method_declarations[get_top_fans],        {&quot;topfans&quot;, &quot;user&quot;}, parse_users},
-	{&amp;artist_method_declarations[get_top_tags],        {&quot;toptags&quot;, &quot;tag&quot;}, parse_tags},
-	{&amp;artist_method_declarations[get_top_tracks],      {&quot;toptracks&quot;, &quot;track&quot;}, parse_tracks}
+	{&amp;artist_method_declarations[get_events],          {&quot;events&quot;, &quot;event&quot;}, DATE_EVENTS},
+	{&amp;artist_method_declarations[get_similar_artists], {&quot;similarartists&quot;, &quot;artist&quot;}, DATA_ARTISTS},
+	{&amp;artist_method_declarations[get_info],            {&quot;artist&quot;, &quot;similar&quot;, &quot;artist&quot;}, DATA_ARTISTS},
+	{&amp;artist_method_declarations[get_info],            {&quot;artist&quot;, &quot;tags&quot;, &quot;tag&quot;}, DATA_TAGS},
+	{&amp;artist_method_declarations[get_top_albums],      {&quot;topalbums&quot;, &quot;album&quot;}, DATA_ALBUMS},
+	{&amp;artist_method_declarations[get_top_fans],        {&quot;topfans&quot;, &quot;user&quot;}, DATA_USERS},
+	{&amp;artist_method_declarations[get_top_tags],        {&quot;toptags&quot;, &quot;tag&quot;}, DATA_TAGS},
+	{&amp;artist_method_declarations[get_top_tracks],      {&quot;toptracks&quot;, &quot;track&quot;}, DATA_TRACKS}
 };
 
 enum related_info
@@ -91,16 +91,6 @@ enum related_info
 	ARTIST_TOP_TRACKS
 };
 
-const lfmget* get_primary_info_call(const enum primary_info info)
-{
-	return &amp;primary_methods[info];
-}
-
-const lfmget* get_related_info_call(const enum related_info info)
-{
-	return &amp;related_methods[info];
-} 
-
 G_GNUC_NULL_TERMINATED void artist_get_info_with_parameters(const gchar* artist, const lfmget* call, gpointer callback, gpointer user_data, ...)
 {	
 	createv(lfmparametervalue, parameters);
@@ -130,18 +120,17 @@ void artist_get_info(const gchar* artist, const lfmget* call, gpointer callback,
 
 void artist_get_name(const gchar* musicbrainz_id, utf8_callback callback, gpointer user_data)
 {
-	const lfmget* call = get_primary_info_call(ARTIST_NAME);
-	get_info_with_parameters(call, callback, user_data, musicbrainz_id, NULL);
+	get_info_with_parameters(&amp;primary_methods[ARTIST_NAME], callback, user_data, musicbrainz_id, NULL);
 }
 
 void artist_get_musicbrainz_id(const gchar* artist, utf8_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_primary_info_call(ARTIST_MUSICBRAINZ_ID), callback, user_data);
+	artist_get_info(artist, &amp;primary_methods[ARTIST_MUSICBRAINZ_ID], callback, user_data);
 }
 
 void artist_get_url(const gchar* artist, url_callback callback, gpointer user_data)
 {
-	get_primary_info_call(ARTIST_URL);
+	artist_get_info(artist, &amp;primary_methods[ARTIST_URL], callback, user_data);
 }
 
 void artist_get_image_url(const gchar* artist, image_size size, url_callback callback, gpointer user_data)
@@ -151,13 +140,13 @@ void artist_get_image_url(const gchar* artist, image_size size, url_callback cal
 	switch(size)
 	{
 		case IMAGE_LARGE:
-			call = get_primary_info_call(ARTIST_IMAGE_SMALL);
+			call = &amp;primary_methods[ARTIST_IMAGE_SMALL];
 			break;
 		case IMAGE_MEDIUM:
-			call = get_primary_info_call(ARTIST_IMAGE_MEDIUM);
+			call = &amp;primary_methods[ARTIST_IMAGE_MEDIUM];
 			break;
 		default:
-			call = get_primary_info_call(ARTIST_IMAGE_SMALL);
+			call = &amp;primary_methods[ARTIST_IMAGE_SMALL];
 			break;
 	}
 	
@@ -166,32 +155,32 @@ void artist_get_image_url(const gchar* artist, image_size size, url_callback cal
 
 void artist_is_streamable(const gchar* artist, boolean_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_primary_info_call(ARTIST_STREAMABLE), callback, user_data);
+	artist_get_info(artist, &amp;primary_methods[ARTIST_STREAMABLE], callback, user_data);
 }
 
 void artist_get_listener_count(const gchar* artist, guint_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_primary_info_call(ARTIST_LISTENER_COUNT), callback, user_data);
+	artist_get_info(artist, &amp;primary_methods[ARTIST_LISTENER_COUNT], callback, user_data);
 }
 
 void artist_get_play_count(const gchar* artist, guint_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_primary_info_call(ARTIST_PLAY_COUNT), callback, user_data);
+	artist_get_info(artist, &amp;primary_methods[ARTIST_PLAY_COUNT], callback, user_data);
 }
 
 void artist_get_published_date_time(const gchar* artist, date_time_callback callback, gpointer user_data)
 {	
-	artist_get_info(artist, get_primary_info_call(ARTIST_TEXT_PUBLISHED), callback, user_data);
+	artist_get_info(artist, &amp;primary_methods[ARTIST_TEXT_PUBLISHED], callback, user_data);
 }
 
 void artist_get_summary(const gchar* artist, utf8_callback callback, gpointer user_data)
 {	
-	artist_get_info(artist, get_primary_info_call(ARTIST_SUMMARY), callback, user_data);
+	artist_get_info(artist, &amp;primary_methods[ARTIST_SUMMARY], callback, user_data);
 }
 
 void artist_get_description(const gchar* artist, utf8_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_primary_info_call(ARTIST_DESCRIPTION), callback, user_data);	
+	artist_get_info(artist, &amp;primary_methods[ARTIST_DESCRIPTION], callback, user_data);	
 }
 
 //
@@ -200,38 +189,38 @@ void artist_get_description(const gchar* artist, utf8_callback callback, gpointe
 
 void artist_get_events(const gchar* artist, events_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_related_info_call(ARTIST_EVENTS), callback, user_data);
+	artist_get_info(artist, &amp;related_methods[ARTIST_EVENTS], callback, user_data);
 }
 
 //0 means no limit
 void artist_get_similar_artists(const gchar* artist, guint limit, artists_callback callback, gpointer user_data)
 {
-	artist_get_info_with_parameters(artist, get_related_info_call(ARTIST_SIMILAR_2), callback, user_data, limit, NULL);
+	artist_get_info_with_parameters(artist, &amp;related_methods[ARTIST_SIMILAR_2], callback, user_data, limit, NULL);
 }
 
 void artist_get_tags(const gchar* artist, tags_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_related_info_call(ARTIST_TAGS), callback, user_data);
+	artist_get_info(artist, &amp;related_methods[ARTIST_TAGS], callback, user_data);
 }
 
 void artist_get_top_albums(const gchar* artist, albums_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_related_info_call(ARTIST_TOP_ALBUMS), callback, user_data);
+	artist_get_info(artist, &amp;related_methods[ARTIST_TOP_ALBUMS], callback, user_data);
 }
     
 void artist_get_top_fans(const gchar* artist, users_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_related_info_call(ARTIST_TOP_FANS), callback, user_data);
+	artist_get_info(artist, &amp;related_methods[ARTIST_TOP_FANS], callback, user_data);
 }
 
 void artist_get_top_tags(const gchar* artist, tags_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_related_info_call(ARTIST_TOP_TAGS), callback, user_data);	
+	artist_get_info(artist, &amp;related_methods[ARTIST_TOP_TAGS], callback, user_data);	
 }
 
 void artist_get_top_tracks(const gchar* artist, tracks_callback callback, gpointer user_data)
 {
-	artist_get_info(artist, get_related_info_call(ARTIST_TOP_TRACKS), callback, user_data);
+	artist_get_info(artist, &amp;related_methods[ARTIST_TOP_TRACKS], callback, user_data);
 }
 
 void artist_add_tags()</diff>
      <filename>artist.c</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,40 @@
-
+#include &quot;include.h&quot;
+#include &quot;communication.h&quot;
 #include &quot;authentication.h&quot;
-/*
-&quot;auth.getToken&quot;
-	api_key: 
-	api_sig: A 32-character API method signature, constructed as explained in Section 6
-	*/
 	
-void request_authentication_by_user(const gchar* token)
+const lfmmethod authentication_method_declarations[] = 
 {
-	
+	{&quot;auth.getToken&quot;, {}}
+};
+
+//enum has to be index of declarations
+//changing this will break other code!
+enum authentication_methods
+{
+	get_token
+};
+
+static const lfmget primary_methods[] = 
+{
+	{&amp;authentication_method_declarations[get_token], {&quot;lfm&quot;, &quot;token&quot;}, DATA_UTF8}
+};
+
+enum primary_info
+{
+	AUTHENTICATION_GET_TOKEN
+};
+
+void authentication_get_token(utf8_callback callback, gpointer user_data)
+{
+	get_info_with_parameters(&amp;primary_methods[AUTHENTICATION_GET_TOKEN], callback, user_data, NULL);
+}
+
+void get_authtoken(gchar* token, guint token_size, GError* error)
+{
+	token_request_authorization(token, token_size);
+} 
+
+void authenticate()
+{
+	authentication_get_token(get_authtoken, NULL);
 }</diff>
      <filename>authentication.c</filename>
    </modified>
    <modified>
      <diff>@@ -2,5 +2,9 @@
 #define AUTHENTICATION_H_
 
 #include &lt;glib.h&gt;
+#include &quot;callback.h&quot;
+
+void authenticate();
+void authentication_get_token(utf8_callback callback, gpointer user_data);
 
 #endif /*AUTHENTICATION_H_*/</diff>
      <filename>authentication.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@
 #include &lt;glib.h&gt;
 #include &quot;lfmobjects.h&quot;
 
-typedef void (*utf8_callback)(gchar** utf8, guint* utf8_length, GError** error);
+typedef void (*utf8_callback)(gchar* utf8, guint utf8_length, GError* error);
 typedef void (*url_callback)(gchar** url, guint* url_length, GError** error);
 typedef void (*guint_callback)(guint digit, GError** error);
 typedef void (*boolean_callback)(gboolean istrue, GError** error);</diff>
      <filename>callback.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,7 @@
 #include &quot;communication.h&quot;
 
 static const gchar* api_key = &quot;100780b228c8aa69be51d709572b45b8&quot;;
+static const gchar* secret = &quot;ba296e6c0de47df63b43d4410a702626&quot;;
 static const gchar* webservice_url = &quot;http://ws.audioscrobbler.com/2.0/&quot;;
 
 static const gchar* get_api_key()
@@ -27,7 +28,46 @@ gchar* build_post_url()
 	return g_strdup(webservice_url);
 }
 
-void token_request_authentication(const gchar* token)
+const lfmmethod token_method_declarations[] = 
+{
+	{&quot;auth.getsession&quot;, {{&quot;token&quot;, NULL, FALSE}}}
+};
+
+enum token_method
+{
+	get_session
+};
+
+const lfmget token_data_declarations[] =
+{
+	{&amp;token_method_declarations[get_session], {&quot;lfm&quot;, &quot;session&quot;, &quot;name&quot;}, DATA_UTF8},
+	{&amp;token_method_declarations[get_session], {&quot;lfm&quot;, &quot;session&quot;, &quot;key&quot;}, DATA_UTF8},
+	{&amp;token_method_declarations[get_session], {&quot;lfm&quot;, &quot;session&quot;, &quot;subscriber&quot;}, DATA_BOOLEAN}
+};
+
+enum token_data
+{
+	SESSION_NAME,
+	SESSION_KEY,
+	SESSION_IS_SUBSCRIBER
+};
+
+void session_get_name(const gchar* token, utf8_callback callback, gpointer user_data)
+{
+	get_info_with_parameters(&amp;token_data_declarations[SESSION_NAME], callback, user_data, token, NULL); 
+}
+
+void session_get_key(const gchar* token, utf8_callback callback, gpointer user_data)
+{
+	get_info_with_parameters(token, &amp;token_data_declarations[SESSION_KEY], callback, user_data, token, NULL);
+}
+
+void session_is_subscriber(const gchar* token, boolean_callback callback, gpointer user_data)
+{
+	get_info_with_parameters(&amp;token_data_declarations[SESSION_IS_SUBSCRIBER], callback, user_data, token, NULL);
+}	
+
+gboolean token_request_authorization(gchar* token, guint token_size)
 {
 	createv(gchar, argv);
 	addv(gchar, argv, &quot;x-www-browser&quot;);
@@ -51,6 +91,31 @@ void token_request_authentication(const gchar* token)
 		);
 	
 	g_free(argv[1]);
+	g_free(argv);
+	return success;
+}
+
+const gchar* token_get_session(const gchar* token)
+{
+/*
+	get_data_from_method(&quot;auth.getSession&quot;, 
+	token:
+	api_sig: token_get_signature(token, auth.getsession);
+	
+	*  2 : Invalid service -This service does not exist
+    * 3 : Invalid Method - No method with that name in this package
+    * 4 : Authentication Failed - You do not have permissions to access the service
+    * 5 : Invalid format - This service doesn't exist in that format
+    * 6 : Invalid parameters - Your request is missing a required parameter
+    * 7 : Invalid resource specified
+    * 9 : Invalid session key - Please re-authenticate
+    * 10 : Invalid API key - You must be granted a valid key by last.fm
+    * 11 : Service Offline - This service is temporarily offline. Try again later.
+    * 12 : Subscribers Only - This service is only available to paid last.fm subscribers
+    * 4 : Invalid authentication token supplied
+    * 14 : This token has not been authorized
+    * 15 : This token has expired
+*/
 }
 
 void token_get_signature(const gchar* token, const gchar* method_name)
@@ -363,29 +428,6 @@ void send_data_to_method(const gchar* method_name, gchar** names, gchar** values
 	proxy_post(get_proxy(), method_name, names, values);
 }
 
-const gchar* token_get_session(const gchar* token)
-{
-/*
-	get_data_from_method(&quot;auth.getSession&quot;, 
-	token:
-	api_sig: token_get_signature(token, auth.getsession);
-	
-	*  2 : Invalid service -This service does not exist
-    * 3 : Invalid Method - No method with that name in this package
-    * 4 : Authentication Failed - You do not have permissions to access the service
-    * 5 : Invalid format - This service doesn't exist in that format
-    * 6 : Invalid parameters - Your request is missing a required parameter
-    * 7 : Invalid resource specified
-    * 9 : Invalid session key - Please re-authenticate
-    * 10 : Invalid API key - You must be granted a valid key by last.fm
-    * 11 : Service Offline - This service is temporarily offline. Try again later.
-    * 12 : Subscribers Only - This service is only available to paid last.fm subscribers
-    * 4 : Invalid authentication token supplied
-    * 14 : This token has not been authorized
-    * 15 : This token has expired
-*/
-}
-
 gpointer parse_utf8(const gchar* string, gpointer user_data, GError** error)
 {
 	return g_strdup(string);
@@ -431,15 +473,36 @@ void utf8_array2csl(void* pointer, gchar** css, size_t* byte_count)
 	*byte_count = strlen(*css) * sizeof(gchar);
 }
 
+void guint2utf8(void* array, gchar** utf8, size_t* byte_count)
+{
+}
+
 GDate* utf82date(const char* date_string)
 {
 	GDate* date = g_date_new;
 	g_date_set_parse(date, date_string);
 }
 
-gpointer parse_date(const gchar* string, gpointer user_data, GError** error)
+gboolean parse_boolean(const gchar* user, size_t user_size, GError** error)
+{
+	return TRUE;
+}
+
+guint parse_uint(const gchar* user, size_t user_size, GError** error)
+{
+	return 0;
+}
+
+gchar* parse_url(const gchar* user, size_t user_size, GError** error)
+{
+	return NULL;
+}
+
+GTimeVal parse_date_time(const gchar* date_time, size_t date_time_size, GError** error)
 {
-	return utf82date(string);
+	GTimeVal test;
+	return test;
+	//return utf82date(date_time);
 }
 
 G_GNUC_NULL_TERMINATED void get_info_with_parameters(const lfmget* call, gpointer callback, gpointer user_data, ...)</diff>
      <filename>communication.c</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,7 @@
 #define COMMUNICATION_H_
 
 #include &lt;glib.h&gt;
+#include &quot;callback.h&quot;
 
 struct lfmproxy;
 typedef struct lfmproxy lfmproxy;
@@ -20,6 +21,11 @@ typedef struct lfmproxy lfmproxy;
 	addv(gchar, array, G_STRUCT_MEMBER_P(astruct, 1));\
 	addv(gchar, array, G_STRUCT_MEMBER_P(astruct, 2));
 	
+//
+//Token functions
+//
+gboolean token_request_authorization(gchar* token, guint token_size);	
+	/*
 enum refid
 {
 	PRIMARY_ID   = 1 &lt;&lt; 0,
@@ -27,6 +33,7 @@ enum refid
 	ANY_ID = PRIMARY_ID | SECONDARY_ID
 };
 typedef enum refid refid;
+*/
 
 typedef void (*type_converter)(void* type, gchar** utf8, guint* utf8_length);
 
@@ -45,13 +52,28 @@ struct lfmmethod
 	const lfmparameter parameters[2];	
 };
 
+enum data_type
+{
+	DATA_UTF8,
+	DATA_URL,
+	DATA_DATE_TIME,
+	DATA_BOOLEAN,
+	DATA_UINT,
+	DATE_EVENTS,
+	DATA_ARTISTS,
+	DATA_ALBUMS,
+	DATA_USERS,
+	DATA_TAGS,
+	DATA_TRACKS
+};
+
 typedef struct lfmmethod lfmmethod;
 	
 struct lfmget
 {
 	const lfmmethod* method;
 	const gchar* path[5]; 
-	const void* data_parser; 
+	const enum data_type data_parser; 
 };
 
 typedef struct lfmget lfmget;
@@ -68,18 +90,8 @@ struct lfmparametervalue
 
 typedef struct lfmparametervalue lfmparametervalue;
 
-//
-// Available general parse functions
-//
-
-gpointer parse_utf8(const gchar* string, gpointer user_data, GError** error);
-gpointer parse_url(const gchar* string, gpointer user_data, GError** error);
-gpointer parse_boolean(const gchar* string, gpointer user_data, GError** error);
-gpointer parse_guint(const gchar* string, gpointer user_data, GError** error);
-gpointer parse_date_time(const gchar* string, gpointer user_data, GError** error);
-
 void utf8_array2csl(void* array, gchar** utf8, size_t* byte_count);
-void guint2utf8();
+void guint2utf8(void* array, gchar** utf8, size_t* byte_count);
 
 void fill_parameters(lfmparametervalue** values, const lfmmethod* method, va_list vl);
 </diff>
      <filename>communication.h</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 AC_PREREQ(2.61)
-AC_INIT(liblastfm,0.0.1)
+AC_INIT(lastfm,0.0.1)
 AC_PROG_CC
 AC_PROG_LIBTOOL
 </diff>
      <filename>configure.in</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,7 @@
 #ifndef LASTFM_H_
 #define LASTFM_H_
 
+#include &quot;authentication.h&quot;
 #include &quot;album.h&quot;
 #include &quot;artist.h&quot;
 </diff>
      <filename>lastfm.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a681d5f0b478dfb95af663c86de1f7e87d1dd54d</id>
    </parent>
  </parents>
  <author>
    <name>LCID Fire</name>
    <email>lcid-fire@gmx.net</email>
  </author>
  <url>http://github.com/LCID-Fire/liblastfm/commit/2b8415c9354a98c7bb302eaf3ada037f49a58b0a</url>
  <id>2b8415c9354a98c7bb302eaf3ada037f49a58b0a</id>
  <committed-date>2008-07-06T12:04:43-07:00</committed-date>
  <authored-date>2008-07-06T12:04:43-07:00</authored-date>
  <message>Further development (some bits of refactoring)</message>
  <tree>7b04fbc6416bb40a073eb37e0e56b3df8e5d9224</tree>
  <committer>
    <name>LCID Fire</name>
    <email>lcid-fire@gmx.net</email>
  </committer>
</commit>
