diff --git a/.DS_Store b/.DS_Store
index fd812186103f30ad3099c3c25c56aae5f65425f3..982df13d14b722a85bfc0fea8dae8a2fbbd25bbb 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/Firmware/.DS_Store b/Firmware/.DS_Store
index a35d3a53cdb04fcacecc833f5e24489b550c2555..b7d6f163c85dbc850abf175140875ce950e27e0f 100644
Binary files a/Firmware/.DS_Store and b/Firmware/.DS_Store differ
diff --git a/Firmware/USBtoSerial/Config/LUFAConfig.h b/Firmware/Config/LUFAConfig.h
similarity index 100%
rename from Firmware/USBtoSerial/Config/LUFAConfig.h
rename to Firmware/Config/LUFAConfig.h
diff --git a/Firmware/USBtoSerial/Descriptors.c b/Firmware/Descriptors.c
similarity index 99%
rename from Firmware/USBtoSerial/Descriptors.c
rename to Firmware/Descriptors.c
index 982703707fa70121f7ed96aa27827bf717dab953..b2eb78830e5403310ac14da35733a4b39abcfda9 100755
--- a/Firmware/USBtoSerial/Descriptors.c
+++ b/Firmware/Descriptors.c
@@ -191,7 +191,7 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR
  *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
  *  Descriptor.
  */
-const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA USB-RS232 Adapter");
+const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"FabFTDI");
 
 /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
  *  documentation) by the application code so that the address and size of a requested descriptor can be given
diff --git a/Firmware/USBtoSerial/Descriptors.h b/Firmware/Descriptors.h
similarity index 100%
rename from Firmware/USBtoSerial/Descriptors.h
rename to Firmware/Descriptors.h
diff --git a/Firmware/FTDI_README.txt b/Firmware/FTDI_README.txt
deleted file mode 100755
index 7427be70cfeb832af33d67fda9634e70caf635a5..0000000000000000000000000000000000000000
--- a/Firmware/FTDI_README.txt
+++ /dev/null
@@ -1 +0,0 @@
-FabFTDI Readme
diff --git a/Firmware/USBtoSerial/LUFA USBtoSerial.inf b/Firmware/LUFA USBtoSerial.inf
similarity index 100%
rename from Firmware/USBtoSerial/LUFA USBtoSerial.inf
rename to Firmware/LUFA USBtoSerial.inf
diff --git a/Firmware/USBtoSerial/USBtoSerial.c b/Firmware/USBtoSerial.c
similarity index 100%
rename from Firmware/USBtoSerial/USBtoSerial.c
rename to Firmware/USBtoSerial.c
diff --git a/Firmware/USBtoSerial/USBtoSerial.h b/Firmware/USBtoSerial.h
similarity index 100%
rename from Firmware/USBtoSerial/USBtoSerial.h
rename to Firmware/USBtoSerial.h
diff --git a/Firmware/USBtoSerial/USBtoSerial.txt b/Firmware/USBtoSerial.txt
similarity index 100%
rename from Firmware/USBtoSerial/USBtoSerial.txt
rename to Firmware/USBtoSerial.txt
diff --git a/Firmware/USBtoSerial/makefile b/Firmware/USBtoSerial/makefile
deleted file mode 100755
index 5082f3b0293b5fb537bf21249f648b1850d28f1d..0000000000000000000000000000000000000000
--- a/Firmware/USBtoSerial/makefile
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          = atmega16u2
-ARCH         = AVR8
-BOARD        = NONE
-F_CPU        = 16000000
-F_USB        = $(F_CPU)
-OPTIMIZATION = s
-TARGET       = USBtoSerial
-SRC          = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
-LUFA_PATH    = ../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/
-LD_FLAGS     =
-
-# Default target
-all:
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/cppcheck.mk
-include $(DMBS_PATH)/doxygen.mk
-include $(DMBS_PATH)/dfu.mk
-include $(DMBS_PATH)/gcc.mk
-include $(DMBS_PATH)/hid.mk
-include $(DMBS_PATH)/avrdude.mk
-include $(DMBS_PATH)/atprogram.mk
diff --git a/Firmware/USBtoSerial/asf.xml b/Firmware/asf.xml
similarity index 100%
rename from Firmware/USBtoSerial/asf.xml
rename to Firmware/asf.xml
diff --git a/Firmware/USBtoSerial/doxyfile b/Firmware/doxyfile
similarity index 100%
rename from Firmware/USBtoSerial/doxyfile
rename to Firmware/doxyfile
diff --git a/Firmware/makefile b/Firmware/makefile
index 56d40086c4b06d2bae97317954209e70c9bc506a..60b63512b753938bcf6dc846b128cf8fee3a5acd 100755
--- a/Firmware/makefile
+++ b/Firmware/makefile
@@ -5,22 +5,55 @@
 #  dean [at] fourwalledcubicle [dot] com
 #           www.lufa-lib.org
 #
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
 
-# Makefile to build the LUFA library, projects and demos.
+# Run "make help" for target help.
 
-# Call with "make all" to rebuild everything, "make clean" to clean everything,
-# "make mostlyclean" to remove all intermediary files but preserve any binaries,
-# "make doxygen" to document everything with Doxygen (if installed). Call
-# "make help" for additional target build information within a specific project.
+MCU          = atmega16u2
+ARCH         = AVR8
+BOARD        = NONE
+F_CPU        = 16000000
+F_USB        = $(F_CPU)
+OPTIMIZATION = s
+TARGET       = USBtoSerial
+SRC          = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH    = ./LUFA
+CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/
+LD_FLAGS     =
 
+# Default target
 all:
 
-%:
-	@echo Executing \"make $@\" on all LUFA library elements.
-	@echo
-	$(MAKE) -C LUFA $@
-	$(MAKE) -C Demos $@
-	$(MAKE) -C Projects $@
-	$(MAKE) -C Bootloaders $@
-	@echo
-	@echo LUFA \"make $@\" operation complete.
+# Include LUFA-specific DMBS extension modules
+DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
+include $(DMBS_LUFA_PATH)/lufa-sources.mk
+include $(DMBS_LUFA_PATH)/lufa-gcc.mk
+
+# Include common DMBS build system modules
+DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
+include $(DMBS_PATH)/cppcheck.mk
+include $(DMBS_PATH)/doxygen.mk
+include $(DMBS_PATH)/dfu.mk
+include $(DMBS_PATH)/gcc.mk
+include $(DMBS_PATH)/hid.mk
+include $(DMBS_PATH)/avrdude.mk
+include $(DMBS_PATH)/atprogram.mk
+
+
+# Programming
+
+program-avrisp2: $(TARGET).hex
+	avrdude -p m16u2 -P usb -c avrisp2 -U flash:w:$(TARGET).hex
+
+program-avrisp2-fuses: $(TARGET).hex
+	avrdude -p m16u2 -P usb -c avrisp2 -U lfuse:w:0x5E:m
+
+program-usbtiny: $(TARGET).hex
+	avrdude -p m16u2 -P usb -c usbtiny -U flash:w:$(TARGET).hex
+
+program-usbtiny-fuses: $(TARGET).hex
+	avrdude -p m16u2 -P usb -c usbtiny -U lfuse:w:0x5E:m
+
diff --git a/Firmware/term.py b/Firmware/term.py
new file mode 100644
index 0000000000000000000000000000000000000000..de2332639302c0edfb2ad32d7be1130fbf8fa186
--- /dev/null
+++ b/Firmware/term.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+#
+# term.py
+#
+# term.py serial_port port_speed
+#
+# Neil Gershenfeld
+# CBA MIT 7/27/07
+#
+# (c) Massachusetts Institute of Technology 2007
+# This work may be reproduced, modified, distributed,
+# performed, and displayed for any purpose. Copyright is
+# retained and must be preserved. The work is provided
+# as is; no warranty is provided, and users accept all 
+# liability.
+#
+
+import sys,time,serial
+from Tkinter import *
+from select import *
+
+NROWS = 25
+NCOLS = 80
+
+def key(event):
+   #
+   # key press event handles
+   #
+   key = event.char
+   #print 'send',ord(key)
+   if (ord(key) == 13):
+      key = chr(10)
+   ser.write(key)
+
+def quit():
+   #
+   # clean up and quit
+   #
+   sys.exit()
+
+def idle(parent):
+   #
+   # idle loop
+   #
+   wait = ser.inWaiting()
+   if (wait != 0):
+      #
+      # read character
+      #
+      byte = ser.read()
+      widget_text.config(state=NORMAL)
+      #print byte,ord(byte)
+      if (ord(byte) == 10):
+         #
+	 # CR
+	 #
+	 widget_text.insert(INSERT,'\n')
+	 if (int(float(widget_text.index(END))) > (NROWS+1)):
+	    widget_text.delete(1.0,2.0)
+      #if (ord(byte) == 13):
+         #
+	 # CR
+	 #
+	 #widget_text.insert(INSERT,'\n')
+	 #if (int(float(widget_text.index(END))) > (NROWS+1)):
+	 #   widget_text.delete(1.0,2.0)
+      elif (byte == 8):
+         #
+         # BS
+         #
+         widget_text.delete(INSERT+"-1c",INSERT)
+      else:
+         #
+         # character
+         #
+         widget_text.insert(INSERT,byte)
+      widget_text.config(state=DISABLED)
+   time.sleep(0.001)
+   parent.after_idle(idle,parent)
+
+#
+#  check command line arguments
+#
+if (len(sys.argv) != 3):
+   print "command line: term.py serial_port speed"
+   sys.exit()
+port = sys.argv[1]
+speed = int(sys.argv[2])
+#
+# open serial port
+#
+ser = serial.Serial(port,speed)
+ser.setDTR()
+#
+# flush buffers
+#
+ser.flushInput()
+ser.flushOutput()
+#
+# set up UI
+#
+root = Tk()
+root.bind('<Key>',key)
+root.title('term.py')
+#
+widget_quit = Button(root, text="quit",command=quit)
+widget_quit.pack()
+#
+address_frame = Frame(root)
+Label(address_frame,text="port: "+port).pack(side='left')
+Label(address_frame,text="  speed: "+str(speed)).pack(side='left')
+address_frame.pack()
+#
+widget_text = Text(root, bg='white', bd=5, width=NCOLS, height=NROWS, font=('arial',10,'bold'))
+#widget_text.bind('<Key>',key)
+widget_text.config(state=DISABLED)
+widget_text.pack()
+#
+# begin event loop
+#
+root.after(100,idle,root)
+root.mainloop()
diff --git a/index_files/FabFTDI_Mac.png b/index_files/FabFTDI_Mac.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d2f265dec985b4798d41d394bc5fad96f4a713c
Binary files /dev/null and b/index_files/FabFTDI_Mac.png differ
diff --git a/index_files/FabFTDI_listed.png b/index_files/FabFTDI_listed.png
new file mode 100644
index 0000000000000000000000000000000000000000..9eddd0d97195ad0626c519b211b57540c9831299
Binary files /dev/null and b/index_files/FabFTDI_listed.png differ
diff --git a/index_files/FabFTDI_notlisted.png b/index_files/FabFTDI_notlisted.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a92c23a94a83aebc6e191f10a7eff2d6f8a6642
Binary files /dev/null and b/index_files/FabFTDI_notlisted.png differ