diff --git a/doggo.py b/doggo.py
index 569fc8d..a45ab8c 100644
--- a/doggo.py
+++ b/doggo.py
@@ -36,7 +36,6 @@ class Doggo(BotPlugin):
 
         return resp.json()['message']
 
-
     @botcmd(split_args_with=' ')
     def listbreeds(self, msg, args):
         """
@@ -79,3 +78,67 @@ class Doggo(BotPlugin):
             # Tell user command was successful
             direct_to_user = self.build_identifier(str(msg.frm))
             self.send(direct_to_user, "Breed list successfully loaded")
+
+    @botcmd(split_args_with=' ')
+    def listsubbreeds(self, msg, args):
+        """
+           List available sub-breeds of a breed for use in the random image retriever
+        """
+        if len(args) > 0 and args[0]:
+            breed = args[0]
+            if not self.breeds:
+                args.append('calledbyfunction')
+                self.reloadbreeds(msg, args)
+                if not self.breeds:
+                    return 'Unable to load sub-breeds list'
+            if breed not in self.breeds.keys():
+                return 'Breed not found: {}. List breeds with !listbreeds'.format(breed)
+        else:
+            return 'Please tell me the breed for which you want sub-breeds, like: *!listsubbreeds terrier*'
+
+        # Send the output to the user to prevent spamming the channel
+        direct_to_user = self.build_identifier(str(msg.frm))
+
+        if len(self.breeds[breed]) == 0:
+            args.append('calledbyfunction')
+            self.reloadsubbreeds(msg, args)
+            if len(self.breeds[breed]) == 0:
+                return 'No sub-breeds available for {}.'.format(breed)
+
+        for subbreed in sorted(self.breeds[breed]):
+            self.send(direct_to_user, subbreed)
+
+    @botcmd(admin_only=True, split_args_with=' ')
+    def reloadsubbreeds(self, msg, args):
+        """
+           Reloads the list of sub-breeds currently available for a given breed
+        """
+        if len(args) > 0 and args[0]:
+            breed = args[0]
+            if not self.breeds:
+                self.reloadbreeds(msg, args)
+                if not self.breeds:
+                    return 'Unable to load sub-breeds list'
+            if breed in self.breeds.keys():
+                url = '{}/breed/{}/list'.format(self.BASE_URL, breed)
+            else:
+                return 'Breed not found: {}. List breeds with !listbreeds'.format(breed)
+        else:
+            return 'Please tell me the breed for which you want sub-breeds, like: *!reloadsubbreeds terrier*'
+        
+        try:
+            resp = requests.get(url)
+            resp.raise_for_status()
+        except requests.exceptions.HTTPError as e:
+            logging.debug(e)
+            return 'Unable to load sub-breeds list'
+
+        data = resp.json()['message']
+        if not isinstance(data, list):
+            return 'Unable to load sub-breeds list'
+        
+        self.breeds[breed] = data
+        if 'calledbyfunction' not in args:
+            # Tell user command was successful
+            direct_to_user = self.build_identifier(str(msg.frm))
+            self.send(direct_to_user, "Sub-breed list successfully loaded")