diff --git a/README.markdown b/README.markdown
index 43eb968..5f06b46 100644
--- a/README.markdown
+++ b/README.markdown
@@ -223,6 +223,10 @@ Now you got two options:
 
| POST /1/webhooks                                                       | IMPLEMENTED | 
 | DELETE /1/webhooks/[idWebhook]                                         | IMPLEMENTED | 
 
+| Labels | 
+| GET /1/labels/[label]                                                      | IMPLEMENTED | 
+| POST /1/labels/[label]                                                      | IMPLEMENTED | 
+
                                                                      
 
 ## Contributors
@@ -230,6 +234,7 @@ Now you got two options:
 [skydjol](https://github.com/skydjol)
 
 
+
 	
 
 	
diff --git a/src/main/java/org/trello4j/CardService.java b/src/main/java/org/trello4j/CardService.java
index b6ec9b7..969a23e 100644
--- a/src/main/java/org/trello4j/CardService.java
+++ b/src/main/java/org/trello4j/CardService.java
@@ -13,8 +13,8 @@
 
 /**
  * The Interface CardService.
- * 
- * @author 
+ *
+ * @author
  */
 public interface CardService {
 
@@ -34,6 +34,8 @@ public interface CardService {
 
 	List getMembersByCard(String cardId);
 
+	Card updateCard(String id, Map keyValMap);
+
 	/**
 	 * Add a new {@link Card} with the optional keyValue pairs.
 	 * @param idList Id of the {@link org.trello4j.model.List}
@@ -42,4 +44,6 @@ public interface CardService {
 	 * @param keyValeMap Map of the optional key-value-pairs.
 	 */
 	Card createCard(String idList, String name, Map keyValeMap);
+
+	List addLabelToCard(String idCard, String idLabel);
 }
diff --git a/src/main/java/org/trello4j/LabelService.java b/src/main/java/org/trello4j/LabelService.java
new file mode 100644
index 0000000..cbae8b0
--- /dev/null
+++ b/src/main/java/org/trello4j/LabelService.java
@@ -0,0 +1,28 @@
+package org.trello4j;
+
+import org.trello4j.model.Label;
+
+/**
+ * The Interface LabelService.
+ *
+ * @author joel
+ */
+public interface LabelService {
+
+	/**
+	 * Gets the label.
+	 *
+	 * @param labelId
+	 *            the label id
+	 * @return the label
+	 */
+	Label getLabel(String labelId);
+/**
+ * Create a new label
+ * @param name
+ * @param boardId
+ * @param color (optionnal)
+ * @return
+ */
+	Label createLabel(String name, String boardId, String color);
+}
\ No newline at end of file
diff --git a/src/main/java/org/trello4j/Trello.java b/src/main/java/org/trello4j/Trello.java
index fdfae23..385fcec 100644
--- a/src/main/java/org/trello4j/Trello.java
+++ b/src/main/java/org/trello4j/Trello.java
@@ -6,12 +6,12 @@
  * The Interface Trello.
  */
 public interface Trello extends OrganizationService, NotificationService,
-		BoardService, CardService, ActionService, ListService, MemberService,
+		BoardService, CardService, ActionService, ListService, LabelService, MemberService,
 		ChecklistService, TokenService, WebhookService {
 
 	/**
 	 * Gets the type.
-	 * 
+	 *
 	 * @param idOrName
 	 *            the id or name
 	 * @return the type
diff --git a/src/main/java/org/trello4j/TrelloException.java b/src/main/java/org/trello4j/TrelloException.java
index 221a987..9489ce3 100644
--- a/src/main/java/org/trello4j/TrelloException.java
+++ b/src/main/java/org/trello4j/TrelloException.java
@@ -17,12 +17,21 @@ public TrelloException() {
 
 	/**
 	 * Instantiates a new trello exception.
-	 * 
+	 *
 	 * @param msg
 	 *            the msg
 	 */
 	public TrelloException(String msg) {
 		super(msg);
 	}
+	/**
+	 * Instantiates a new trello exception.
+	 *
+	 * @param msg
+	 *            the msg
+	 */
+	public TrelloException(String msg, Throwable e) {
+		super(msg, e);
+	}
 
 }
diff --git a/src/main/java/org/trello4j/TrelloImpl.java b/src/main/java/org/trello4j/TrelloImpl.java
index 8aaaf88..81939b9 100644
--- a/src/main/java/org/trello4j/TrelloImpl.java
+++ b/src/main/java/org/trello4j/TrelloImpl.java
@@ -1,17 +1,9 @@
 package org.trello4j;
 
-import com.google.gson.reflect.TypeToken;
-
-import org.trello4j.model.*;
-import org.trello4j.model.Board.Prefs;
-import org.trello4j.model.Card.Attachment;
-import org.trello4j.model.Checklist.CheckItem;
-
-import javax.net.ssl.HttpsURLConnection;
-
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.net.URL;
 import java.net.URLEncoder;
 import java.util.HashMap;
@@ -19,6 +11,24 @@
 import java.util.Map;
 import java.util.zip.GZIPInputStream;
 
+import javax.net.ssl.HttpsURLConnection;
+
+import org.trello4j.model.Action;
+import org.trello4j.model.Board;
+import org.trello4j.model.Board.Prefs;
+import org.trello4j.model.Card;
+import org.trello4j.model.Card.Attachment;
+import org.trello4j.model.Checklist;
+import org.trello4j.model.Checklist.CheckItem;
+import org.trello4j.model.Member;
+import org.trello4j.model.Notification;
+import org.trello4j.model.Organization;
+import org.trello4j.model.Token;
+import org.trello4j.model.Type;
+import org.trello4j.model.Webhook;
+
+import com.google.gson.reflect.TypeToken;
+
 /**
  * The Class TrelloImpl.
  */
@@ -29,6 +39,7 @@ public class TrelloImpl implements Trello {
     private static final String METHOD_POST     = "POST";
     private static final String METHOD_PUT      = "PUT";
 	private static final String GZIP_ENCODING   = "gzip";
+	private static final int HTTP_TIMEOUT = Integer.valueOf(System.getProperty("org.trello4j.https.timeout", "60000"));
 
 	private String apiKey = null;
 	private String token = null;
@@ -51,7 +62,7 @@ public TrelloImpl(String apiKey, String token) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.WebhookService#getWebhook(java.lang.String)
 	 */
 	@Override
@@ -65,10 +76,10 @@ public List getWebhooks() {
 		return trelloObjFactory.createObject(new TypeToken>() {
 		}, doGet(url));
 	}
-	
+
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.WebhookService#createWebhook(java.lang.String)
 	 */
 	@Override
@@ -82,14 +93,14 @@ public Webhook createWebhook(String description, String callbackUrl, String idMo
 		keyValueMap.put("description", description);
 		keyValueMap.put("callbackURL", callbackUrl);
 		keyValueMap.put("idModel", idModel);
-		
+
 		return trelloObjFactory.createObject(new TypeToken() {
 		}, doPost(url, keyValueMap));
 	}
-	
+
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.WebhookService#deleteWebhook(java.lang.String)
 	 */
 	@Override
@@ -98,13 +109,13 @@ public void deleteWebhook(String idWebhook) {
 				.create(apiKey, TrelloURL.WEBHOOKS_ID_URL, idWebhook)
 				.token(token)
 				.build();
-		
+
 		doDelete(url);
 	}
-	
+
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.WebhookService#getWebhook(java.lang.String)
 	 */
 	@Override
@@ -113,14 +124,14 @@ public Webhook getWebhook(String idWebhook) {
 				.create(apiKey, TrelloURL.WEBHOOKS_ID_URL, idWebhook)
 				.token(token)
 				.build();
-		
+
 		return trelloObjFactory.createObject(new TypeToken() {
 		}, doGet(url));
 	}
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getBoard(java.lang.String)
 	 */
 	@Override
@@ -138,7 +149,7 @@ public Board getBoard(final String boardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getActionsByBoard(java.lang.String,
 	 * java.lang.String[])
 	 */
@@ -159,7 +170,7 @@ public List getActionsByBoard(final String boardId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getCardsByBoard(java.lang.String)
 	 */
 	@Override
@@ -177,7 +188,7 @@ public List getCardsByBoard(String boardId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getChecklistByBoard(java.lang.String)
 	 */
 	@Override
@@ -194,7 +205,7 @@ public List getChecklistByBoard(String boardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getListByBoard(java.lang.String)
 	 */
 	@Override
@@ -215,7 +226,7 @@ public List getListByBoard(String boardId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getMembersByBoard(java.lang.String)
 	 */
 	@Override
@@ -234,7 +245,7 @@ public List getMembersByBoard(String boardId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getMembersInvitedByBoard(java.lang.String)
 	 */
 	@Override
@@ -253,7 +264,7 @@ public List getMembersInvitedByBoard(String boardId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getPrefsByBoard(java.lang.String)
 	 */
 	@Override
@@ -270,7 +281,7 @@ public Prefs getPrefsByBoard(String boardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.BoardService#getOrganizationByBoard(java.lang.String)
 	 */
 	@Override
@@ -289,7 +300,7 @@ public Organization getOrganizationByBoard(String boardId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ActionService#getAction(java.lang.String)
 	 */
 	@Override
@@ -308,7 +319,7 @@ public Action getAction(final String actionId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.OrganizationService#getOrganization(java.lang.String)
 	 */
 	@Override
@@ -325,7 +336,7 @@ public Organization getOrganization(String organizationName,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.MemberService#getMember(java.lang.String)
 	 */
 	@Override
@@ -341,7 +352,7 @@ public Member getMember(String usernameOrId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.MemberService#getBoardsByMember(java.lang.String)
 	 */
 	@Override
@@ -358,7 +369,7 @@ public List getBoardsByMember(String usernameOrId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.OrganizationService#getBoardsByOrganization(java.lang.String
 	 * )
@@ -380,7 +391,7 @@ public List getBoardsByOrganization(String organizationName,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.OrganizationService#getActionsByOrganization(java.lang.String
 	 * )
@@ -400,7 +411,7 @@ public List getActionsByOrganization(String organizationNameOrId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getCard(java.lang.String)
 	 */
 	@Override
@@ -418,7 +429,7 @@ public Card getCard(final String cardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getActionsByCard(java.lang.String)
 	 */
 	@Override
@@ -436,7 +447,7 @@ public List getActionsByCard(final String cardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getAttachmentsByCard(java.lang.String)
 	 */
 	@Override
@@ -454,7 +465,7 @@ public List getAttachmentsByCard(final String cardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getBoardByCard(java.lang.String)
 	 */
 	@Override
@@ -473,7 +484,7 @@ public Board getBoardByCard(final String cardId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getCheckItemStatesByCard(java.lang.String)
 	 */
 	@Override
@@ -491,7 +502,7 @@ public List getCheckItemStatesByCard(final String cardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getChecklistByCard(java.lang.String)
 	 */
 	@Override
@@ -509,7 +520,7 @@ public List getChecklistByCard(final String cardId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getListByCard(java.lang.String)
 	 */
 	@Override
@@ -531,7 +542,7 @@ public org.trello4j.model.List getListByCard(final String cardId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.CardService#getMembersByCard(java.lang.String)
 	 */
 	@Override
@@ -563,7 +574,76 @@ public Card createCard(String idList, String name, Map keyValueM
 		return trelloObjFactory.createObject(new TypeToken() {
 		}, doPost(url, keyValueMap));
 	}
+	@Override
+	public List addLabelToCard(String idCard, String idLabel) {
+		validateObjectId(idCard);
+		validateObjectId(idLabel);
+
+		final String url = TrelloURL
+				.create(apiKey, TrelloURL.CARD_LABELS_URL, idCard)
+				.token(token)
+				.build();
+		Map keyValueMap = new HashMap();
+		keyValueMap.put("value", idLabel);
+
+		return trelloObjFactory.createObject(new TypeToken>() {
+		}, doPost(url, keyValueMap));
+	}
 
+	@Override
+	public Card updateCard(String id, Map keyValueMap) {
+		if (keyValueMap == null){
+			return getCard(id);
+		}
+		final String url = TrelloURL
+				.create(apiKey, TrelloURL.CARD_URL, id)
+				.token(token)
+				.build();
+		return trelloObjFactory.createObject(new TypeToken() {
+			}, doPut(url, keyValueMap));
+	}
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.trello4j.LabelService#getLabel(java.lang.String)
+	 */
+	@Override
+	public org.trello4j.model.Label getLabel(final String labelId) {
+		validateObjectId(labelId);
+
+		final String url = TrelloURL
+				.create(apiKey, TrelloURL.LABELS_URL, labelId)
+				.token(token)
+				.build();
+
+		return trelloObjFactory.createObject(
+				new TypeToken() {
+				},
+				doGet(url));
+	}
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.trello4j.LabelService#createLabel(java.lang.String)
+	 */
+	@Override
+	public org.trello4j.model.Label createLabel(final String name, final String boardId, final String color) {
+		validateObjectId(boardId);
+
+		final String url = TrelloURL
+				.create(apiKey, TrelloURL.LABELS_POST_URL)
+				.token(token)
+				.build();
+		Map keyValueMap = new HashMap();
+		keyValueMap.put("name", name);
+		keyValueMap.put("idBoard", boardId);
+		if(color != null){
+			keyValueMap.put("color", color);
+		}
+
+		return trelloObjFactory.createObject(new TypeToken() {
+		}, doPost(url, keyValueMap));
+	}
 	/*
 	 * (non-Javadoc)
 	 *
@@ -586,7 +666,7 @@ public org.trello4j.model.List getList(final String listId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.NotificationService#getNotification(java.lang.String)
 	 */
 	@Override
@@ -606,7 +686,7 @@ public Notification getNotification(String notificationId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ChecklistService#getChecklist(java.lang.String)
 	 */
 	@Override
@@ -625,7 +705,7 @@ public Checklist getChecklist(String checklistId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.Trello#getType(java.lang.String)
 	 */
 	@Override
@@ -641,7 +721,7 @@ public Type getType(String idOrName) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ActionService#getBoardByAction(java.lang.String)
 	 */
 	@Override
@@ -660,7 +740,7 @@ public Board getBoardByAction(String actionId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ActionService#getCardByAction(java.lang.String)
 	 */
 	@Override
@@ -679,7 +759,7 @@ public Card getCardByAction(String actionId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ActionService#getMemberByAction(java.lang.String)
 	 */
 	@Override
@@ -698,7 +778,7 @@ public Member getMemberByAction(String actionId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ActionService#getListByAction(java.lang.String)
 	 */
 	@Override
@@ -720,7 +800,7 @@ public org.trello4j.model.List getListByAction(String actionId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.ActionService#getMemberCreatorByAction(java.lang.String)
 	 */
@@ -741,7 +821,7 @@ public Member getMemberCreatorByAction(String actionId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ActionService#getOrganizationByAction(java.lang.String)
 	 */
 	@Override
@@ -761,7 +841,7 @@ public Organization getOrganizationByAction(String actionId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.OrganizationService#getMembersByOrganization(java.lang.String
 	 * )
@@ -785,7 +865,7 @@ public List getMembersByOrganization(String organizationNameOrId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.NotificationService#getBoardByNotification(java.lang.String)
 	 */
@@ -809,7 +889,7 @@ public Board getBoardByNotification(String notificationId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.NotificationService#getCardByNotification(java.lang.String)
 	 */
@@ -833,7 +913,7 @@ public Card getCardByNotification(String notificationId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.NotificationService#getListByNotification(java.lang.String)
 	 */
@@ -856,7 +936,7 @@ public org.trello4j.model.List getListByNotification(String notificationId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.NotificationService#getMemberByNotification(java.lang.String
 	 * )
@@ -881,7 +961,7 @@ public Member getMemberByNotification(String notificationId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.NotificationService#getMemberCreatorByNotification(java.
 	 * lang.String)
@@ -906,7 +986,7 @@ public Member getMemberCreatorByNotification(String notificationId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.NotificationService#getOrganizationCreatorByNotification
 	 * (java.lang.String)
@@ -931,7 +1011,7 @@ public Member getOrganizationCreatorByNotification(String notificationId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ListService#getActionsByList(java.lang.String)
 	 */
 	@Override
@@ -949,7 +1029,7 @@ public List getActionsByList(String listId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ListService#getBoardByList(java.lang.String)
 	 */
 	@Override
@@ -968,7 +1048,7 @@ public Board getBoardByList(String listId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ListService#getCardsByList(java.lang.String)
 	 */
 	@Override
@@ -987,7 +1067,7 @@ public List getCardsByList(String listId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.MemberService#getActionsByMember(java.lang.String)
 	 */
 	@Override
@@ -1004,7 +1084,7 @@ public List getActionsByMember(String usernameOrId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.MemberService#getCardsByMember(java.lang.String)
 	 */
 	@Override
@@ -1023,7 +1103,7 @@ public List getCardsByMember(String usernameOrId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.MemberService#getNotificationsByMember(java.lang.String)
 	 */
@@ -1048,7 +1128,7 @@ public List getNotificationsByMember(String usernameOrId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.MemberService#getOrganizationsByMember(java.lang.String)
 	 */
@@ -1070,7 +1150,7 @@ public List getOrganizationsByMember(String usernameOrId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.MemberService#getOrganizationsInvitedByMember(java.lang.
 	 * String)
@@ -1096,7 +1176,7 @@ public List getOrganizationsInvitedByMember(
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ChecklistService#getBoardByChecklist(java.lang.String)
 	 */
 	@Override
@@ -1116,7 +1196,7 @@ public List getOrganizationsInvitedByMember(
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.trello4j.ChecklistService#getCheckItemsByChecklist(java.lang.String)
 	 */
@@ -1135,7 +1215,7 @@ public List getCheckItemsByChecklist(String checklistId) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.ChecklistService#getCardByChecklist(java.lang.String)
 	 */
 	@Override
@@ -1155,7 +1235,7 @@ public List getCardByChecklist(String checklistId,
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.TokenService#getToken(java.lang.String)
 	 */
 	@Override
@@ -1174,7 +1254,7 @@ public Token getToken(String tokenId, final String... filter) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.trello4j.TokenService#getMemberByToken(java.lang.String)
 	 */
 	@Override
@@ -1195,8 +1275,8 @@ private InputStream doGet(String url) {
 		return doRequest(url, METHOD_GET);
 	}
 
-	private InputStream doPut(String url) {
-		return doRequest(url, METHOD_PUT);
+	private InputStream doPut(String url, Map map) {
+		return doRequest(String.format("%s&%s", url, createParameterString(map)), METHOD_PUT, null);
 	}
 
 	private InputStream doPost(String url, Map map) {
@@ -1210,6 +1290,22 @@ private InputStream doDelete(String url) {
 	private InputStream doRequest(String url, String requestMethod) {
         return doRequest(url, requestMethod, null);
 	}
+	private String createParameterString(Map map){
+		StringBuilder sb = new StringBuilder();
+		try {
+			for (String key : map.keySet()) {
+            	if(map.get(key) != null){
+            		sb.append(sb.length() > 0 ? "&" : "")
+					    .append(key)
+					    .append("=")
+					    .append(URLEncoder.encode(map.get(key), "UTF-8").replace("+", "%20"));
+            	}
+        	}
+		} catch (UnsupportedEncodingException e) {
+			throw new TrelloException(e.getMessage(), e);
+		}
+        return sb.toString();
+	}
 
 	/**
 	 * Execute a POST request with URL-encoded key-value parameter pairs.
@@ -1222,18 +1318,12 @@ private InputStream doRequest(String url, String requestMethod, Map 0 ? "&" : "")
-                        .append(key)
-                        .append("=")
-                        .append(URLEncoder.encode(map.get(key), "UTF-8"));
-                }
-                conn.getOutputStream().write(sb.toString().getBytes());
+                conn.getOutputStream().write(createParameterString(map).toString().getBytes());
                 conn.getOutputStream().close();
             }
 
@@ -1245,7 +1335,7 @@ private InputStream doRequest(String url, String requestMethod, Map
 	 *            the generic type
 	 * @param typeToken
@@ -45,12 +46,13 @@ public  T createObject(TypeToken typeToken, InputStream jsonContent) {
 		if (jsonContent == null) {
 			return isList(typeToken) ? (T) Collections.emptyList() : null;
 		}
-		return unmarshallToObj(typeToken, unmarshallToJson(jsonContent));
+		T object = unmarshallToObj(typeToken, unmarshallToJson(jsonContent));
+		return object;
 	}
 
 	/**
 	 * Unmarshall to json.
-	 * 
+	 *
 	 * @param jsonContent
 	 *            the json content
 	 * @return the json element
@@ -77,7 +79,7 @@ private JsonElement unmarshallToJson(InputStream jsonContent) {
 
 	/**
 	 * Unmarshall to obj.
-	 * 
+	 *
 	 * @param 
 	 *            the generic type
 	 * @param typeToken
@@ -93,7 +95,7 @@ private  T unmarshallToObj(TypeToken typeToken, JsonElement response) {
 
 	/**
 	 * Gets the gson.
-	 * 
+	 *
 	 * @return the gson
 	 */
 	private Gson getGson() {
@@ -113,7 +115,7 @@ private Gson getGson() {
 
 	/**
 	 * Close stream.
-	 * 
+	 *
 	 * @param is
 	 *            the is
 	 */
@@ -129,7 +131,7 @@ private void closeStream(InputStream is) {
 
 	/**
 	 * Checks if is list.
-	 * 
+	 *
 	 * @param typeToken
 	 *            the type token
 	 * @return true, if is list
diff --git a/src/main/java/org/trello4j/TrelloURL.java b/src/main/java/org/trello4j/TrelloURL.java
index c70cf0b..793d653 100644
--- a/src/main/java/org/trello4j/TrelloURL.java
+++ b/src/main/java/org/trello4j/TrelloURL.java
@@ -39,11 +39,14 @@ public class TrelloURL {
 	public static final String CARD_CHECK_ITEM_STATES_URL = "https://api.trello.com/1/cards/{0}/checkItemStates";
 	public static final String CARD_CHECKLISTS_URL = "https://api.trello.com/1/cards/{0}/checklists";
 	public static final String CARD_LIST_URL = "https://api.trello.com/1/cards/{0}/list";
+	public static final String CARD_LABELS_URL = "https://api.trello.com/1/cards/{0}/idLabels";
 	public static final String CARD_MEMBERS_URL = "https://api.trello.com/1/cards/{0}/members";
 	public static final String CARD_POST_URL = "https://api.trello.com/1/cards";
 	public static final String LIST_ACTIONS_URL = "https://api.trello.com/1/lists/{0}/action";
 	public static final String LIST_BOARD_URL = "https://api.trello.com/1/lists/{0}/board";
 	public static final String LIST_CARDS_URL = "https://api.trello.com/1/lists/{0}/cards";
+	public static final String LABELS_URL = "https://api.trello.com/1/labels/{0}";
+	public static final String LABELS_POST_URL = "https://api.trello.com/1/labels";
 	public static final String MEMBER_ACTIONS_URL = "https://api.trello.com/1/members/{0}/actions";
 	public static final String MEMBER_BOARD_INVITED_URL = "https://api.trello.com/1/members/{0}/boardInvited";
 	public static final String MEMBER_CARDS_URL = "https://api.trello.com/1/members/{0}/cards";
diff --git a/src/main/java/org/trello4j/model/Card.java b/src/main/java/org/trello4j/model/Card.java
index cd07394..1754dd2 100644
--- a/src/main/java/org/trello4j/model/Card.java
+++ b/src/main/java/org/trello4j/model/Card.java
@@ -166,26 +166,4 @@ public void setIdMember(String idMember) {
 			this.idMember = idMember;
 		}
 	}
-
-	public class Label {
-
-		private String color;
-		private String name;
-
-		public String getColor() {
-			return color;
-		}
-
-		public void setColor(String color) {
-			this.color = color;
-		}
-
-		public String getName() {
-			return name;
-		}
-
-		public void setName(String name) {
-			this.name = name;
-		}
-	}
 }
diff --git a/src/main/java/org/trello4j/model/Label.java b/src/main/java/org/trello4j/model/Label.java
new file mode 100644
index 0000000..afeac77
--- /dev/null
+++ b/src/main/java/org/trello4j/model/Label.java
@@ -0,0 +1,81 @@
+package org.trello4j.model;
+
+/**
+ * 
+ * {
+ * 	"id":"4e7b86d7ce194786721560b8",
+ * 	"name":"Known Issues",
+ * 	"closed":false,
+ * 	"idBoard":"4d5ea62fd76aa1136000000c",
+ * 	"pos":9408.2119140625
+ * }
+ * 
+ *
+ * @author joel
+ *
+ */
+public class Label extends TrelloObject {
+
+	/** The name. */
+	private String name;
+
+	/** The closed. */
+	private String color;
+
+	/** The id board. */
+	private String idBoard;
+
+	/**
+	 * Gets the name.
+	 *
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Sets the name.
+	 *
+	 * @param name
+	 *            the new name
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * Gets the id board.
+	 *
+	 * @return the id board
+	 */
+	public String getIdBoard() {
+		return idBoard;
+	}
+
+	/**
+	 * Sets the id board.
+	 *
+	 * @param idBoard
+	 *            the new id board
+	 */
+	public void setIdBoard(String idBoard) {
+		this.idBoard = idBoard;
+	}
+
+	/**
+	 * @return the color
+	 */
+	public String getColor() {
+		return color;
+	}
+
+	/**
+	 * @param color the color to set
+	 */
+	public void setColor(String color) {
+		this.color = color;
+	}
+
+
+}