diff --git a/username_to_uuid.py b/username_to_uuid.py
index eb91780..0e40a3d 100644
--- a/username_to_uuid.py
+++ b/username_to_uuid.py
@@ -1,25 +1,38 @@
 """ Username to UUID
  Converts a Minecraft username to it's UUID equivalent.
 
-Parses http://www.lb-stuff.com/Minecraft-Name-History output to retrieve the UUID
- of an old name that's no longer in use.
+Uses the official Mojang API to fetch player data.
 """
 import http.client
-
-from bs4 import BeautifulSoup
+import json
 
 
 class UsernameToUUID:
     def __init__(self, username):
         self.username = username
 
-    def get_uuid(self):
+    def get_uuid(self, timestamp=None):
         """
           Get the UUID of the player.
-        """
-        httpConn = http.client.HTTPConnection("www.lb-stuff.com");
-        httpConn.request("GET", "/Minecraft-Name-History?user=" + self.username);
-        response = httpConn.getresponse().read()
-        soup = BeautifulSoup(response)
 
-        return soup.body.findAll('p')[1].findAll('code')[1].text
+          Parameters
+          ----------
+          timestamp : long integer
+              The time at which the player used this name, expressed as a Unix timestamp.
+        """
+        get_args = "" if timestamp is None else "?at=" + str(timestamp)
+
+        http_conn = http.client.HTTPSConnection("api.mojang.com");
+        http_conn.request("GET", "/users/profiles/minecraft/" + self.username + get_args,
+            headers={'User-Agent':'Minecraft Username -> UUID', 'Content-Type':'application/json'});
+        response = http_conn.getresponse().read().decode("utf-8")
+
+        if (not response and timestamp is None): # No response & no timestamp
+            return self.get_uuid(0) # Let's retry with the Unix timestamp 0.
+        if (not response): # No response (player probably doesn't exist)
+            return ""
+
+        json_data = json.loads(response)
+        uuid = json_data['id']
+
+        return uuid