diff --git a/source/brailleDisplayDrivers/brailliantB.py b/source/brailleDisplayDrivers/brailliantB.py
index 177df9f..080f09b 100644
--- a/source/brailleDisplayDrivers/brailliantB.py
+++ b/source/brailleDisplayDrivers/brailliantB.py
@@ -47,10 +47,10 @@ KEY_NAMES = {
 	15: "c5",
 	16: "c6",
 	# Thumb keys.
-	17: "up",
-	18: "left",
-	19: "right",
-	20: "down",
+	17: "thumb1",
+	18: "thumb2",
+	19: "thumb3",
+	20: "thumb4",
 }
 FIRST_ROUTING_KEY = 80
 DOT1_KEY = 2
@@ -104,12 +104,17 @@ class BrailleDisplayDriver(braille.BrailleDisplayDriver):
 		super(BrailleDisplayDriver, self).__init__()
 		self.numCells = 0
 
+		self.connectToBrailleDisplay()
+		
+	def connectToBrailleDisplay(self):
 		for portType, port in _getPorts():
 			# Try talking to the display.
 			try:
 				self._ser = serial.Serial(port, baudrate=BAUD_RATE, parity=PARITY, timeout=TIMEOUT, writeTimeout=TIMEOUT)
 			except serial.SerialException:
 				continue
+			except UnicodeDecodeError, e:
+				continue
 			# This will cause the number of cells to be returned.
 			self._sendMessage(MSG_INIT)
 			self._handleResponses(wait=True)
@@ -144,11 +149,24 @@ class BrailleDisplayDriver(braille.BrailleDisplayDriver):
 	def _sendMessage(self, msgId, payload=""):
 		if isinstance(payload, (int, bool)):
 			payload = chr(payload)
-		self._ser.write("{header}{id}{length}{payload}".format(
-			header=HEADER, id=msgId,
-			length=chr(len(payload)), payload=payload))
+		try:
+			self._ser.write("{header}{id}{length}{payload}".format(
+				header=HEADER, id=msgId,
+				length=chr(len(payload)), payload=payload))
+		except Exception, e:
+			if msgId != MSG_INIT:
+				if self._ser != None:
+					self._ser.close()
+					self._ser = None
+				try:
+					self.connectToBrailleDisplay()
+				except RuntimeError, e:
+					return False
+			return True
 
 	def _handleResponses(self, wait=False):
+		if self._ser is None:
+			return
 		while wait or self._ser.inWaiting():
 			msgId, payload = self._readPacket()
 			if msgId:
@@ -201,22 +219,27 @@ class BrailleDisplayDriver(braille.BrailleDisplayDriver):
 
 	gestureMap = inputCore.GlobalGestureMap({
 		"globalCommands.GlobalCommands": {
-			"braille_scrollBack": ("br(brailliantB):left",),
-			"braille_scrollForward": ("br(brailliantB):right",),
-			"braille_previousLine": ("br(brailliantB):up",),
-			"braille_nextLine": ("br(brailliantB):down",),
+			"braille_scrollBack": ("br(brailliantB):thumb1", "br(brailliantB):c2",),
+			"braille_scrollForward": ("br(brailliantB):thumb4", "br(brailliantB):c5",),
+			"braille_previousLine": ("br(brailliantB):thumb2", "br(brailliantB):c4",),
+			"braille_nextLine": ("br(brailliantB):thumb3", "br(brailliantB):c6",),
 			"braille_routeTo": ("br(brailliantB):routing",),
-			"braille_toggleTether": ("br(brailliantB):up+down",),
+			"braille_toggleTether": ("br(brailliantB):thumb1+thumb4",),
+			"kb:backspace": ("br(brailliantB):space+dot7",),
 			"kb:upArrow": ("br(brailliantB):space+dot1",),
 			"kb:downArrow": ("br(brailliantB):space+dot4",),
 			"kb:leftArrow": ("br(brailliantB):space+dot3",),
 			"kb:rightArrow": ("br(brailliantB):space+dot6",),
+			"kb:home": ("br(brailliantB):space+dot2",),
+			"kb:end": ("br(brailliantB):space+dot5",),
+			"kb:pageup": ("br(brailliantB):space+dot2+dot3",),
+			"kb:pagedown": ("br(brailliantB):space+dot5+dot6",),
 			"showGui": ("br(brailliantB):c1+c3+c4+c5",),
-			"kb:shift+tab": ("br(brailliantB):space+dot1+dot3",),
-			"kb:tab": ("br(brailliantB):space+dot4+dot6",),
+			"kb:shift+tab": ("br(brailliantB):space+dot2+dot3+dot5+dot6+dot7",),
+			"kb:tab": ("br(brailliantB):space+dot2+dot3+dot5+dot6",),
 			"kb:alt": ("br(brailliantB):space+dot1+dot3+dot4",),
-			"kb:escape": ("br(brailliantB):space+dot1+dot5",),
-			"kb:enter": ("br(brailliantB):dot8",),
+			"kb:escape": ("br(brailliantB):space+dot2+dot6",),
+			"kb:enter": ("br(brailliantB):space+dot8",),
 			"kb:windows+d": ("br(brailliantB):c1+c4+c5",),
 			"kb:windows": ("br(brailliantB):space+dot3+dot4",),
 			"kb:alt+tab": ("br(brailliantB):space+dot2+dot3+dot4+dot5",),
