diff --git a/src/python/dm/aps_beamline_tools/gui/addExperiment.py b/src/python/dm/aps_beamline_tools/gui/addExperiment.py
index afa3ebae171623cdac982ff00bab7546909c9d80..16a6c05472c5874e32c019116faebf7a0984cda9 100644
--- a/src/python/dm/aps_beamline_tools/gui/addExperiment.py
+++ b/src/python/dm/aps_beamline_tools/gui/addExperiment.py
@@ -11,9 +11,141 @@ class AddExperimentTab(QWidget):
         super(AddExperimentTab, self).__init__(parent)
         self.stationName = stationName
         self.parent = parent
-        self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
+        self.experimentPropApi = DmApiFactory.getInstance().getBeamlineProposalApi()
         self.addExperimentsTabLayout()
 
     # Sets up the tab's layout, each block is a row
     def addExperimentsTabLayout(self):
-        grid = QGridLayout()
\ No newline at end of file
+        grid = QGridLayout()
+
+        labelFont = QFont('Arial', 18, QFont.Bold)
+        lbl = QLabel(self.stationName + ' Proposal List', self)
+        lbl.setAlignment(Qt.AlignCenter)
+        lbl.setFont(labelFont)
+        grid.addWidget(lbl, 0, 0, 1, 7)
+
+        backBtn = QPushButton('Back', self)
+        backBtn.clicked.connect(lambda: self.setTab(1))
+        backBtn.setMinimumWidth(100)
+        grid.addWidget(backBtn, 1, 5, 1, 2, Qt.AlignCenter)
+
+        grid.addItem(QSpacerItem(1500, 40, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 0)
+
+        self.tableWidget = QTableWidget()
+        self.updateList()
+        self.detailsTable = QTableWidget()
+        self.detailsTable.hide()
+        grid.addWidget(self.detailsTable, 3, 0, 5, 4)
+        grid.addWidget(self.tableWidget, 3, 0, 5, 4)
+        grid.addItem(QSpacerItem(20, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding), 3, 1, 5, 1)
+
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 3, 4)
+        self.detailBtn = QPushButton('Proposal Details', self)
+        self.detailBtn.clicked.connect(self.toggleDetails)
+        self.detailBtn.setFixedSize(150, 100)
+        grid.addWidget(self.detailBtn, 3, 5)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 3, 6)
+
+        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding), 4, 5)
+
+        startBtn = QPushButton('Use Proposal', self)
+        startBtn.clicked.connect(self.startProposal)
+        startBtn.setFixedSize(150, 100)
+        grid.addWidget(startBtn, 5, 5)
+
+        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding), 6, 5)
+
+        modBtn = QPushButton('Continue Manually', self)
+        modBtn.clicked.connect(lambda: self.setTab(0))
+        modBtn.setFixedSize(150, 100)
+        grid.addWidget(modBtn, 7, 5)
+
+        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding, QSizePolicy.Minimum), 8, 0)
+
+        self.addExperimentTabWidget = QWidget()
+        self.addExperimentTabWidget.setLayout(grid)
+
+    def updateList(self):
+        self.proposalList = self.experimentPropApi.listBeamlineProposals()
+        self.tableWidget.setRowCount(len(self.proposalList))
+        self.tableWidget.setColumnCount(1)
+        self.tableWidget.horizontalHeader().setStretchLastSection(True)
+
+        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
+        self.tableWidget.setHorizontalHeaderLabels('Proposal'.split(';'))
+        self.tableWidget.cellDoubleClicked.connect(lambda row, column: self.expandRow(row, column, self.tableWidget))
+
+        i = 0
+        for proposal in self.proposalList:
+            rowPropName = QTableWidgetItem(proposal['title'])
+            rowPropName.setData(Qt.UserRole, proposal['id'])
+            self.tableWidget.setItem(i, 0, rowPropName)
+            if (i % 2) == 0:
+                rowPropName.setBackground(QColor.fromRgb(230, 241, 245))
+            i += 1
+
+    # Used to change between tabs
+    def setTab(self, tab):
+        self.parent.stackedLayout.setCurrentIndex(tab)
+
+    # Expands the given row to fit the size of its contents
+    def expandRow(self, row, column, table):
+        table.resizeRowToContents(row)
+
+    def startProposal(self):
+        row = self.tableWidget.currentRow()
+        name = self.tableWidget.item(row, 0).text()
+        print "Starting " + name
+        self.setTab(0)
+
+    # Resizes the horizontal headers to fit the screen
+    def resizeTable(self, width):
+        totalWidths = sum(self.colWidths)
+        if self.detailsTable.verticalScrollBar().isVisible():
+            newSize = [column * (width - 204) / totalWidths for column in self.colWidths]
+        else:
+            newSize = [column * (width - 204) / totalWidths for column in self.colWidths]
+        for i, column in enumerate(newSize):
+            self.detailsTable.horizontalHeader().resizeSection(i, column)
+
+    def toggleDetails(self):
+        if self.detailBtn.isChecked():
+            self.tableWidget.show()
+            self.detailsTable.hide()
+            self.detailBtn.setChecked(False)
+        else:
+            self.tableWidget.hide()
+            self.proposalDetails()
+            self.detailsTable.show()
+            self.detailBtn.setChecked(True)
+
+    def proposalDetails(self):
+        id = self.tableWidget.item(self.tableWidget.currentRow(), 0).data(Qt.UserRole)
+        proposal = self.experimentPropApi.getBeamlineProposal(id)
+
+        self.detailsTable.setRowCount(len(proposal['experimenters']))
+        self.detailsTable.setColumnCount(4)
+        self.colWidths = (130, 150, 150, 164)
+        for i, size in enumerate(self.colWidths):
+            self.detailsTable.horizontalHeader().resizeSection(i, size)
+        self.detailsTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
+        self.detailsTable.setHorizontalHeaderLabels('Badge Number;First Name;Last Name;Institution'.split(';'))
+        self.detailsTable.cellDoubleClicked.connect(lambda row, column: self.expandRow(row, column, self.detailsTable))
+
+        i = 0
+        for experimenter in proposal['experimenters']:
+            rowBadge = QTableWidgetItem(experimenter['badge'])
+            rowFirstName = QTableWidgetItem(experimenter['firstName'])
+            rowLastName = QTableWidgetItem(experimenter['lastName'])
+            rowInstitution = QTableWidgetItem(experimenter['institution'])
+            self.detailsTable.setItem(i, 0, rowBadge)
+            self.detailsTable.setItem(i, 1, rowFirstName)
+            self.detailsTable.setItem(i, 2, rowLastName)
+            self.detailsTable.setItem(i, 3, rowInstitution)
+            if (i % 2) == 0:
+                rowBadge.setBackground(QColor.fromRgb(230, 241, 245))
+                rowFirstName.setBackground(QColor.fromRgb(230, 241, 245))
+                rowLastName.setBackground(QColor.fromRgb(230, 241, 245))
+                rowInstitution.setBackground(QColor.fromRgb(230, 241, 245))
+            i += 1
+
diff --git a/src/python/dm/aps_beamline_tools/gui/daqsTab.py b/src/python/dm/aps_beamline_tools/gui/daqsTab.py
index d7e15e3f63929ee2c51786fea8eb7eb074370ee3..fb69ba280ac6acc46bb715f05cfba43cc97a1735 100644
--- a/src/python/dm/aps_beamline_tools/gui/daqsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/daqsTab.py
@@ -2,7 +2,7 @@
 
 from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
     QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
-from PyQt4.QtCore import Qt
+from PyQt4.QtCore import Qt, pyqtSignal
 from dmApiFactory import DmApiFactory
  
 # Define the DAQs tab content:
@@ -13,7 +13,6 @@ class DaqsTab(QWidget):
         self.parent = parent
         self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
         self.daqsTabLayout()
-
     def daqsTabLayout(self):
         grid = QGridLayout()
 
@@ -21,33 +20,33 @@ class DaqsTab(QWidget):
         lbl = QLabel(self.stationName + ' DAQs List', self)
         lbl.setAlignment(Qt.AlignCenter)
         lbl.setFont(labelFont)
-        grid.addWidget(lbl, 1, 1, 1, 3)
+        grid.addWidget(lbl, 0, 0, 1, 5)
 
         # lambda allows the passing of variables
         backBtn = QPushButton('Back', self)
         backBtn.clicked.connect(lambda: self.setTab(0))
         backBtn.setMaximumWidth(100)
-        grid.addWidget(backBtn, 2, 3)
+        grid.addWidget(backBtn, 1, 4)
 
-        grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 3, 1)
+        grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)
 
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 1)
         self.tableWidget = QTableWidget()
-        self.tableWidget.setFixedWidth(600)
         self.updateList()
-        grid.addWidget(self.tableWidget, 4, 2)
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 3)
+        grid.addWidget(self.tableWidget, 3, 0, 1, 5)
 
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
         addBtn = QPushButton('Start New', self)
         addBtn.clicked.connect(lambda: self.setTab(0))
-        addBtn.setFixedWidth(250)
-        grid.addWidget(addBtn, 5, 2, Qt.AlignLeft)
+        addBtn.setMinimumWidth(150)
+        grid.addWidget(addBtn, 4, 1)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 2)
         modBtn = QPushButton('Stop Selected', self)
         modBtn.clicked.connect(lambda: self.setTab(0))
-        modBtn.setFixedWidth(250)
-        grid.addWidget(modBtn, 5, 2, Qt.AlignRight)
+        modBtn.setMinimumWidth(150)
+        grid.addWidget(modBtn, 4, 3)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
 
-        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 6, 1)
+        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 5, 0)
 
         self.daqsTabWidget = QWidget()
         self.daqsTabWidget.setLayout(grid)
@@ -56,8 +55,9 @@ class DaqsTab(QWidget):
         self.daqList = self.experimentDaqApi.listDaqs()
         self.tableWidget.setRowCount(len(self.daqList))
         self.tableWidget.setColumnCount(3)
-        self.tableWidget.setColumnWidth(1, 348)
-        self.tableWidget.setColumnWidth(2, 150)
+        self.colWidths = (130, 450, 200)
+        for i, size in enumerate(self.colWidths):
+            self.tableWidget.horizontalHeader().resizeSection(i, size)
         self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.tableWidget.setHorizontalHeaderLabels('ID;Data Directory;Number of Files;'.split(';'))
         self.tableWidget.cellDoubleClicked.connect(self.expandRow)
@@ -82,5 +82,13 @@ class DaqsTab(QWidget):
     def expandRow(self, row, column):
         self.tableWidget.resizeRowToContents(row)
 
-
+    # Resizes the horizontal headers to fit the screen
+    def resizeTable(self, width):
+        totalWidths = sum(self.colWidths)
+        if self.tableWidget.verticalScrollBar().isVisible():
+            newSize = [column * (width - 60) / totalWidths for column in self.colWidths]
+        else:
+            newSize = [column * (width - 19) / totalWidths for column in self.colWidths]
+        for i, column in enumerate(newSize):
+            self.tableWidget.horizontalHeader().resizeSection(i, column)
 
diff --git a/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py b/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py
index de3b65712baac335825755f37f1ad88b0b1233a5..ec637e159746e40bd49bf3fe892b0f94d56e685e 100755
--- a/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py
+++ b/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py
@@ -35,6 +35,11 @@ class DmApiFactory(Singleton):
         api = ExperimentDaqApi(self.username, self.password, self.daqHost, self.daqPort, self.protocol)
         return api
 
+    def getBeamlineProposalApi(self):
+        from dm.aps_bss.api.apsBssApi import ApsBssApi
+        api = ApsBssApi()
+        return api
+
 
 ####################################################################
 # Testing
diff --git a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
index 4b2f94e64011b4b7e24216ef92806979b8f1afde..c9def90902c92c8d22fcdd941bf2e993c0df7343 100755
--- a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
+++ b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
@@ -28,20 +28,21 @@ class DmStationUi(QMainWindow):
  
         # Create a stacked layout to connect the various pages
         self.stackedLayout = QStackedLayout()
+        self.stackedLayout.currentChanged.connect(self.currentChanged)
  
         # Create the tab windows
         self.initialTab = InitialTab(self.stationName, self)
         self.experimentsTab = ExperimentsTab(self.stationName, self)
         self.daqsTab = DaqsTab(self.stationName, self)
         self.uploadsTab = UploadsTab(self.stationName, self)
-        #addExperimentTab = AddExperimentTab(self.stationName, self)
+        self.addExperimentTab = AddExperimentTab(self.stationName, self)
  
         # Add the windows to the stack.
         self.stackedLayout.addWidget(self.initialTab.initialTabWidget)
         self.stackedLayout.addWidget(self.experimentsTab.experimentsTabWidget)
         self.stackedLayout.addWidget(self.daqsTab.daqsTabWidget)
         self.stackedLayout.addWidget(self.uploadsTab.uploadsTabWidget)
-        #self.stackedLayout.addWidget(addExperimentTab.addExperimentTabWidget)
+        self.stackedLayout.addWidget(self.addExperimentTab.addExperimentTabWidget)
 
         # Set a central widget to hold everything
         self.centralWidget = QWidget()
@@ -75,6 +76,21 @@ class DmStationUi(QMainWindow):
             return
         elif currentIndex == 1:
             ExperimentsTab.resizeTable(self.experimentsTab, windowSize)
+        elif currentIndex == 2:
+            DaqsTab.resizeTable(self.daqsTab, windowSize)
+        elif currentIndex == 3:
+            UploadsTab.resizeTable(self.uploadsTab, windowSize)
+        elif currentIndex == 4:
+            AddExperimentTab.resizeTable(self.addExperimentTab, windowSize)
+
+    def currentChanged(self, index):
+        newIndex = index
+        if newIndex == 1:
+            ExperimentsTab.resizeTable(self.experimentsTab, self.geometry().width())
+        elif newIndex == 2:
+            DaqsTab.resizeTable(self.daqsTab, self.geometry().width())
+        elif newIndex == 3:
+            UploadsTab.resizeTable(self.uploadsTab, self.geometry().width())
 
     def getTab(self):
         return self.stackedLayout.currentIndex()
diff --git a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
index 51e820fd0338b31c12fc87c0b3b80010b2dfde38..505910827c070b7db537905567af5b1edf9e2730 100644
--- a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
@@ -11,7 +11,6 @@ class ExperimentsTab(QWidget):
         super(ExperimentsTab, self).__init__(parent)
         self.stationName = stationName
         self.parent = parent
-        self.test = 'cat'
         self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
         self.experimentsTabLayout()
 
@@ -23,31 +22,30 @@ class ExperimentsTab(QWidget):
         lbl = QLabel(self.stationName + ' DM Experiment List', self)
         lbl.setAlignment(Qt.AlignCenter)
         lbl.setFont(labelFont)
-        grid.addWidget(lbl, 0, 0, 1, 3)
+        grid.addWidget(lbl, 0, 0, 1, 5)
 
         backBtn = QPushButton('Back', self)
         backBtn.clicked.connect(lambda: self.setTab(0))
-        backBtn.setMaximumWidth(100)
-        grid.addWidget(backBtn, 1, 2)
+        backBtn.setMinimumWidth(100)
+        grid.addWidget(backBtn, 1, 4, Qt.AlignCenter)
 
         grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)
 
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 0)
         self.tableWidget = QTableWidget()
         self.updateList()
-        grid.addWidget(self.tableWidget, 3, 0, 1, 3)
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 2)
-
+        grid.addWidget(self.tableWidget, 3, 0, 1, 5)
 
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
         addBtn = QPushButton('Add Experiment', self)
-        addBtn.clicked.connect(lambda: self.setTab(0))
-        addBtn.setFixedWidth(250)
-        grid.addWidget(addBtn, 4, 1, Qt.AlignLeft)
+        addBtn.clicked.connect(lambda: self.setTab(4))
+        addBtn.setMinimumWidth(150)
+        grid.addWidget(addBtn, 4, 1)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 2)
         modBtn = QPushButton('Modify Selected', self)
-        modBtn.clicked.connect(lambda: self.setTab(0))
-        modBtn.setFixedWidth(250)
-        grid.addWidget(modBtn, 4, 1, Qt.AlignRight)
-
+        modBtn.clicked.connect(lambda: self.setTab(5))
+        modBtn.setMinimumWidth(150)
+        grid.addWidget(modBtn, 4, 3)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
 
         grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 5, 0)
 
diff --git a/src/python/dm/aps_beamline_tools/gui/initialTab.py b/src/python/dm/aps_beamline_tools/gui/initialTab.py
index 170b2eb3df1dd50114795b5379cb2c6080dcf6fe..9fb8a7caf4a9d010adf577addfd4bf018b062de7 100644
--- a/src/python/dm/aps_beamline_tools/gui/initialTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/initialTab.py
@@ -19,28 +19,28 @@ class InitialTab(QWidget):
         lbl = QLabel(self.stationName + ' DM Tool', self)
         lbl.setAlignment(Qt.AlignCenter)
         lbl.setFont(labelFont)
-        grid.addWidget(lbl, 1, 1, 1, 7)
+        grid.addWidget(lbl, 0, 0, 1, 7)
 
-        grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 2, 1)
+        grid.addItem(QSpacerItem(20, 130, QSizePolicy.Minimum, QSizePolicy.Expanding), 1, 0)
 
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 1)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 0)
         manageBtn = QPushButton('Manage Experiments', self)
         manageBtn.setFixedSize(160, 160)
         manageBtn.clicked.connect(lambda: self.setTab(1))
-        grid.addWidget(manageBtn, 3, 2)
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 3)
+        grid.addWidget(manageBtn, 2, 1)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 2)
         viewBtn = QPushButton('DAQs', self)
         viewBtn.setFixedSize(160, 160)
         viewBtn.clicked.connect(lambda: self.setTab(2))
-        grid.addWidget(viewBtn, 3, 4)
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 5)
+        grid.addWidget(viewBtn, 2, 3)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 4)
         viewBtn = QPushButton('Uploads', self)
         viewBtn.setFixedSize(160, 160)
         viewBtn.clicked.connect(lambda: self.setTab(3))
-        grid.addWidget(viewBtn, 3, 6)
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 7)
+        grid.addWidget(viewBtn, 2, 5)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 6)
 
-        grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 4, 1)
+        grid.addItem(QSpacerItem(20, 130, QSizePolicy.Minimum, QSizePolicy.Expanding), 3, 0)
 
         self.initialTabWidget = QWidget()
         self.initialTabWidget.setLayout(grid)
diff --git a/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py b/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
new file mode 100644
index 0000000000000000000000000000000000000000..fd470b818d7a68468c48e29c889c76d14ed3ebd4
--- /dev/null
+++ b/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+
+from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
+    QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
+from PyQt4.QtCore import Qt
+from dmApiFactory import DmApiFactory
+
+# Define the experiments tab content:
+class ManageUsersTab(QWidget):
+    def __init__(self, stationName, parent, id=-1):
+        super(ManageUsersTab, self).__init__(parent)
+        self.stationName = stationName
+        self.parent = parent
+        self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
+        self.experimentsTabLayout()
\ No newline at end of file
diff --git a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
index 9f164e4112cf04d221105c0e6e630909db32c265..c1147a2be8e251cc8e09acbe1905022e8756dfb7 100644
--- a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
@@ -21,33 +21,33 @@ class UploadsTab(QWidget):
         lbl = QLabel(self.stationName + ' Uploads List', self)
         lbl.setAlignment(Qt.AlignCenter)
         lbl.setFont(labelFont)
-        grid.addWidget(lbl, 1, 1, 1, 3)
+        grid.addWidget(lbl, 0, 0, 1, 5)
 
         # lambda allows the passing of variables
         backBtn = QPushButton('Back', self)
         backBtn.clicked.connect(lambda: self.setTab(0))
         backBtn.setMaximumWidth(100)
-        grid.addWidget(backBtn, 2, 3)
+        grid.addWidget(backBtn, 1, 4)
 
-        grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 3, 1)
+        grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)
 
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 1)
         self.tableWidget = QTableWidget()
-        self.tableWidget.setFixedWidth(600)
         self.updateList()
-        grid.addWidget(self.tableWidget, 4, 2)
-        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 3)
+        grid.addWidget(self.tableWidget, 3, 0, 1, 5)
 
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
         addBtn = QPushButton('Start New', self)
         addBtn.clicked.connect(lambda: self.setTab(0))
-        addBtn.setFixedWidth(250)
-        grid.addWidget(addBtn, 5, 2, Qt.AlignLeft)
+        addBtn.setMinimumWidth(150)
+        grid.addWidget(addBtn, 4, 1)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 2)
         modBtn = QPushButton('Stop Selected', self)
         modBtn.clicked.connect(lambda: self.setTab(0))
-        modBtn.setFixedWidth(250)
-        grid.addWidget(modBtn, 5, 2, Qt.AlignRight)
+        modBtn.setMinimumWidth(150)
+        grid.addWidget(modBtn, 4, 3)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
 
-        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 6, 1)
+        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 5, 0)
 
         self.uploadsTabWidget = QWidget()
         self.uploadsTabWidget.setLayout(grid)
@@ -56,8 +56,9 @@ class UploadsTab(QWidget):
         self.uploadList = self.experimentDaqApi.listUploads()
         self.tableWidget.setRowCount(len(self.uploadList))
         self.tableWidget.setColumnCount(3)
-        self.tableWidget.setColumnWidth(1, 348)
-        self.tableWidget.setColumnWidth(2, 150)
+        self.colWidths = (130, 450, 200)
+        for i, size in enumerate(self.colWidths):
+            self.tableWidget.horizontalHeader().resizeSection(i, size)
         self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.tableWidget.setHorizontalHeaderLabels('ID;Data Directory;Number of Files;'.split(';'))
         self.tableWidget.cellDoubleClicked.connect(self.expandRow)
@@ -82,3 +83,13 @@ class UploadsTab(QWidget):
     def expandRow(self, row, column):
         self.tableWidget.resizeRowToContents(row)
 
+    # Resizes the horizontal headers to fit the screen
+    def resizeTable(self, width):
+        totalWidths = sum(self.colWidths)
+        if self.tableWidget.verticalScrollBar().isVisible():
+            newSize = [column * (width - 60) / totalWidths for column in self.colWidths]
+        else:
+            newSize = [column * (width - 19) / totalWidths for column in self.colWidths]
+        for i, column in enumerate(newSize):
+            self.tableWidget.horizontalHeader().resizeSection(i, column)
+