diff --git a/src/python/dm/aps_beamline_tools/gui/addExperiment.py b/src/python/dm/aps_beamline_tools/gui/addExperiment.py
index 569212f79f2a48a19856bd6deba3278c8649c7b1..fdefba741881bb9e9ac16aa0e2f333ecefe9d11c 100644
--- a/src/python/dm/aps_beamline_tools/gui/addExperiment.py
+++ b/src/python/dm/aps_beamline_tools/gui/addExperiment.py
@@ -26,7 +26,7 @@ class AddExperimentTab(QWidget):
         grid.addWidget(lbl, 0, 0, 1, 7)
 
         backBtn = QPushButton('Back', self)
-        backBtn.clicked.connect(lambda: self.setTab(1))
+        backBtn.clicked.connect(lambda: self.parent.setTab(1))
         backBtn.setMinimumWidth(100)
         grid.addWidget(backBtn, 1, 5, 1, 2, Qt.AlignCenter)
 
@@ -57,7 +57,7 @@ class AddExperimentTab(QWidget):
         grid.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding), 6, 5)
 
         modBtn = QPushButton('Continue Manually', self)
-        modBtn.clicked.connect(lambda: self.setTab(5))
+        modBtn.clicked.connect(lambda: self.parent.setTab(6))
         modBtn.setFixedSize(150, 100)
         grid.addWidget(modBtn, 7, 5)
 
@@ -85,9 +85,6 @@ class AddExperimentTab(QWidget):
                 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):
@@ -98,20 +95,9 @@ class AddExperimentTab(QWidget):
         proposal = self.experimentPropApi.getBeamlineProposal(id)
         objectAllUsers = [UserInfo(x['badge'], x['firstName'], x['id'],  x['lastName'], x['email']) for x in proposal['experimenters']]
         self.parent.currentUsers = objectAllUsers
-        self.setTab(5)
-
-    # Resizes the horizontal headers to fit the screen
-    #def resizeTable(self, width):
-    #    try:
-    #        totalWidths = sum(self.colWidths)
-    #    except AttributeError:
-    #        return
-    #    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)
+        self.parent.generalSettings = {'description': proposal['title']}
+        self.parent.setTab(6)
+
 
     def toggleDetails(self):
         if self.detailBtn.text() == 'Hide Details':
@@ -130,9 +116,6 @@ class AddExperimentTab(QWidget):
 
         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))
diff --git a/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py b/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py
index ec637e159746e40bd49bf3fe892b0f94d56e685e..a585dd6bd1c0a13e814cdd8467e0ae653ee5f864 100755
--- a/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py
+++ b/src/python/dm/aps_beamline_tools/gui/dmApiFactory.py
@@ -40,6 +40,11 @@ class DmApiFactory(Singleton):
         api = ApsBssApi()
         return api
 
+    def getApsUserDbApi(self):
+        from dm.aps_user_db.api.apsUserDbApi import ApsUserDbApi
+        api = ApsUserDbApi()
+        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 edd38d4377bfec176ccf9763592bb8cfeb5faacf..71f0930cb827a54ab052e67ef192b7d8fd8fb79d 100755
--- a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
+++ b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
@@ -16,6 +16,7 @@ from uploadsTab import UploadsTab
 from initialTab import InitialTab
 from addExperiment import AddExperimentTab
 from manageUsersTab import ManageUsersTab
+from genParamsTab import GenParamsTab
 
 
 class DmStationUi(QMainWindow):
@@ -29,6 +30,9 @@ class DmStationUi(QMainWindow):
 
         # Variable to hold the user instances
         self.currentUsers = []
+
+        # Variable to hold the general settings
+        self.generalSettings = {}
  
         # Create a stacked layout to connect the various pages
         self.stackedLayout = QStackedLayout()
@@ -41,6 +45,7 @@ class DmStationUi(QMainWindow):
         self.uploadsTab = UploadsTab(self.stationName, self)
         self.addExperimentTab = AddExperimentTab(self.stationName, self)
         self.manageUsersTab = ManageUsersTab(self.stationName, self)
+        self.genParamsTab = GenParamsTab(self.stationName, self)
  
         # Add the windows to the stack.
         self.stackedLayout.addWidget(self.initialTab.initialTabWidget)
@@ -49,6 +54,7 @@ class DmStationUi(QMainWindow):
         self.stackedLayout.addWidget(self.uploadsTab.uploadsTabWidget)
         self.stackedLayout.addWidget(self.addExperimentTab.addExperimentTabWidget)
         self.stackedLayout.addWidget(self.manageUsersTab.manageUsersTabWidget)
+        self.stackedLayout.addWidget(self.genParamsTab.genParamsTabWidget)
 
         # Set a central widget to hold everything
         self.centralWidget = QWidget()
@@ -74,31 +80,21 @@ class DmStationUi(QMainWindow):
         frameGeo.moveCenter(screenCenter)
         self.move(frameGeo.topLeft())
 
-    # Calls for the table to be resized when a resize event is called
-    #def resizeEvent(self, event):
-    #    windowSize = event.size().width()
-    #    currentIndex = self.getTab()
-    #    if currentIndex == 0:
-    #        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)
-    #    elif currentIndex == 5:
-    #        ManageUsersTab.resizeTable(self.manageUsersTab, windowSize)
 
     def currentChanged(self, index):
         newIndex = index
         if newIndex == 5:
             ManageUsersTab.updateUsers(self.manageUsersTab)
+        if newIndex == 6:
+            GenParamsTab.fillParams(self.genParamsTab)
 
     def getTab(self):
         return self.stackedLayout.currentIndex()
 
+    # Used to change between tabs
+    def setTab(self, tab):
+        self.stackedLayout.setCurrentIndex(tab)
+
 
 if __name__ == "__main__":
     #try:
diff --git a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
index 5a82339a9911133cb4e511a1153f87b7e2a86acc..c4ca049e7d7fcfa9a62f9e200cbbbfaae50afe2f 100644
--- a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
@@ -4,6 +4,7 @@ from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWid
     QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
 from PyQt4.QtCore import Qt
 from dmApiFactory import DmApiFactory
+from objects.userInfo import UserInfo
  
 # Define the experiments tab content:
 class ExperimentsTab(QWidget):
@@ -12,6 +13,7 @@ class ExperimentsTab(QWidget):
         self.stationName = stationName
         self.parent = parent
         self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
+        self.userApi = DmApiFactory.getInstance().getUserDsApi()
         self.experimentsTabLayout()
 
     # Sets up the tab's layout, each block is a row
@@ -25,7 +27,7 @@ class ExperimentsTab(QWidget):
         grid.addWidget(lbl, 0, 0, 1, 5)
 
         backBtn = QPushButton('Back', self)
-        backBtn.clicked.connect(lambda: self.setTab(0))
+        backBtn.clicked.connect(lambda: self.parent.setTab(0))
         backBtn.setMinimumWidth(100)
         grid.addWidget(backBtn, 1, 4, Qt.AlignCenter)
 
@@ -37,13 +39,13 @@ class ExperimentsTab(QWidget):
 
         grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
         addBtn = QPushButton('Add Experiment', self)
-        addBtn.clicked.connect(lambda: self.setTab(4))
+        addBtn.clicked.connect(lambda: self.parent.setTab(4))
         addBtn.setMinimumWidth(150)
         addBtn.setFixedHeight(40)
         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(5))
+        modBtn = QPushButton('Use Selected', self)
+        modBtn.clicked.connect(self.setExperiment)
         modBtn.setMinimumWidth(150)
         modBtn.setFixedHeight(40)
         grid.addWidget(modBtn, 4, 3)
@@ -59,9 +61,7 @@ class ExperimentsTab(QWidget):
         self.experimentList = self.experimentDsApi.getExperimentsByStation(self.stationName)
         self.tableWidget.setRowCount(len(self.experimentList))
         self.tableWidget.setColumnCount(3)
-        self.colWidths = (130, 400, 209)
-        for i, size in enumerate(self.colWidths):
-            self.tableWidget.horizontalHeader().resizeSection(i, size)
+        self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
         self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.tableWidget.setHorizontalHeaderLabels('Name;Description;Start Date;'.split(';'))
         self.tableWidget.cellDoubleClicked.connect(self.expandRow)
@@ -70,6 +70,7 @@ class ExperimentsTab(QWidget):
         i = 0
         for experiment in self.experimentList:
             rowName = QTableWidgetItem(experiment.get('name'))
+            rowName.setData(Qt.UserRole, experiment.get('id'))
             rowDescription = QTableWidgetItem(experiment.get('description', ''))
             rowStartDate = QTableWidgetItem(str(experiment.get('startDate', '')))
             self.tableWidget.setItem(i, 0, rowName)
@@ -81,21 +82,20 @@ class ExperimentsTab(QWidget):
                 rowStartDate.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):
         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 - 60) / totalWidths for column in self.colWidths]
-    #    for i, column in enumerate(newSize):
-    #        self.tableWidget.horizontalHeader().resizeSection(i, column)
+    def setExperiment(self):
+        id = self.tableWidget.item(self.tableWidget.currentRow(), 0).data(Qt.UserRole).toInt()[0]
+        experiment = self.experimentDsApi.getExperimentById(id)
+        self.parent.generalSettings = experiment.data
+        userList = [self.userApi.getUserByUsername(user) for user in experiment['experimentUsernameList']]
+        self.parent.currentUsers = [UserInfo(x['badge'], x['firstName'], x['id'],  x['lastName'], x['email']) for x in userList]
+        self.parent.setTab(6)
+
+
+        # PROBLEM reading self.dbPasswordFile in apsUserDbManager....I need this because I need to be able to get a user from a badge number
+        # Is it true/okay that this will only work for argonne users due to the badge methodology?
 
diff --git a/src/python/dm/aps_beamline_tools/gui/genParamsTab.py b/src/python/dm/aps_beamline_tools/gui/genParamsTab.py
new file mode 100644
index 0000000000000000000000000000000000000000..6381041e53875451d7fae8ee1835687cb9b2f914
--- /dev/null
+++ b/src/python/dm/aps_beamline_tools/gui/genParamsTab.py
@@ -0,0 +1,157 @@
+#!/usr/bin/env python
+
+from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
+    QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView, QLineEdit, QVBoxLayout, QHBoxLayout
+from PyQt4.QtCore import Qt
+from dmApiFactory import DmApiFactory
+
+
+# Define the experiments tab content:
+class GenParamsTab(QWidget):
+    def __init__(self, stationName, parent, id=-1):
+        super(GenParamsTab, self).__init__(parent)
+        self.stationName = stationName
+        self.parent = parent
+        self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
+        self.genParamsTabLayout()
+
+    # Sets up the tab's layout, each block is a row
+    def genParamsTabLayout(self):
+        grid = QGridLayout()
+
+        labelFont = QFont('Arial', 18, QFont.Bold)
+        lbl = QLabel(self.stationName + ' General Settings', self)
+        lbl.setAlignment(Qt.AlignCenter)
+        lbl.setFont(labelFont)
+        grid.addWidget(lbl, 0, 0, 1, 4)
+
+        backBtn = QPushButton('Back', self)
+        backBtn.clicked.connect(lambda: self.parent.setTab(1))
+        backBtn.setMinimumWidth(100)
+        grid.addWidget(backBtn, 1, 1, Qt.AlignRight)
+
+
+        self.nameField = QLineEdit()
+        self.nameField.setPlaceholderText('Name')
+
+        self.startDateField = QLineEdit()
+        self.startDateField.setPlaceholderText('Start Date')
+
+        self.endDateField = QLineEdit()
+        self.endDateField.setPlaceholderText('End Date')
+
+        self.typeField = QLineEdit()
+        self.typeField.setPlaceholderText('Type')
+
+        self.descField = QLineEdit()
+        self.descField.setPlaceholderText('Description')
+
+        self.currentUserTable = QTableWidget()
+
+        toUserBtn = QPushButton('Modify Users', self)
+        toUserBtn.clicked.connect(lambda: self.parent.setTab(5))
+        toUserBtn.setMinimumWidth(100)
+        toUserBtn.setMaximumWidth(150)
+
+        saveSettingsBtn = QPushButton('Save', self)
+        saveSettingsBtn.clicked.connect(self.updateParams)
+        saveSettingsBtn.setMinimumWidth(100)
+        saveSettingsBtn.setMaximumWidth(150)
+
+        startDaqBtn = QPushButton('Start DAQ', self)
+        startDaqBtn.clicked.connect(lambda: self.parent.setTab(0))
+        startDaqBtn.setMinimumWidth(150)
+        startDaqBtn.setMaximumWidth(200)
+        startDaqBtn.setFixedHeight(40)
+
+        startUploadBtn = QPushButton('Start Upload', self)
+        startUploadBtn.clicked.connect(lambda: self.parent.setTab(0))
+        startUploadBtn.setMinimumWidth(150)
+        startUploadBtn.setMaximumWidth(200)
+        startUploadBtn.setFixedHeight(40)
+
+        hRow1 = QHBoxLayout()
+        hRow1.addWidget(self.startDateField)
+        hRow1.addWidget(self.endDateField)
+
+        vColumn1 = QVBoxLayout()
+        vColumn1.addWidget(self.nameField)
+        vColumn1.addLayout(hRow1)
+        vColumn1.addWidget(self.typeField)
+        vColumn1.addWidget(self.descField)
+        grid.addLayout(vColumn1, 2, 0)
+
+        vColumn2 = QVBoxLayout()
+        vColumn2.addWidget(self.currentUserTable)
+
+        grid.addLayout(vColumn2, 2, 1)
+
+        vColumn3 = QVBoxLayout()
+        vColumn3.addWidget(saveSettingsBtn)
+        vColumn3.setAlignment(saveSettingsBtn, Qt.AlignCenter)
+        vColumn3.addWidget(startDaqBtn)
+        vColumn3.setAlignment(startDaqBtn, Qt.AlignCenter)
+        grid.addLayout(vColumn3, 3, 0)
+
+        vColumn4 = QVBoxLayout()
+        vColumn4.addWidget(toUserBtn)
+        vColumn4.setAlignment(toUserBtn, Qt.AlignCenter)
+        vColumn4.addWidget(startUploadBtn)
+        vColumn4.setAlignment(startUploadBtn, Qt.AlignCenter)
+        grid.addLayout(vColumn4, 3, 1)
+
+        self.genParamsTabWidget = QWidget()
+        self.genParamsTabWidget.setLayout(grid)
+
+    # Fills ui with any known information
+    def fillParams(self):
+        for key in self.parent.generalSettings:
+            if key == 'name':
+                self.nameField.setText(self.parent.generalSettings[key])
+            elif key == 'date':
+                self.datefield.setText(self.parent.generalSettings[key])
+            elif key == 'type':
+                self.typeField.setText(self.parent.generalSettings[key])
+            elif key == 'description':
+                self.descField.setText(self.parent.generalSettings[key])
+
+
+        # Set up the current users table
+        self.currentUserTable.setRowCount(len(self.parent.currentUsers))
+        self.currentUserTable.setColumnCount(4)
+        self.currentUserTable.setSelectionBehavior(QAbstractItemView.SelectRows)
+        #for i, size in enumerate(self.colWidths):
+        #    self.currentUserTable.horizontalHeader().resizeSection(i, size)
+        self.currentUserTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
+        self.currentUserTable.setHorizontalHeaderLabels('Badge;First;Last;Email;'.split(';'))
+        self.currentUserTable.cellDoubleClicked.connect(lambda row, column: self.expandRow(row, column, self.currentUserTable))
+
+        i = 0
+        for experimenter in self.parent.currentUsers:
+            rowBadge = QTableWidgetItem(experimenter.getBadge())
+            rowBadge.setData(Qt.UserRole, experimenter.getID())
+            rowFirstName = QTableWidgetItem(experimenter.getFirstName())
+            rowLastName = QTableWidgetItem(experimenter.getLastName())
+            try:
+                rowEmail = QTableWidgetItem(experimenter.getEmail())
+            except KeyError:
+                rowEmail = QTableWidgetItem('')
+            self.currentUserTable.setItem(i, 0, rowBadge)
+            self.currentUserTable.setItem(i, 1, rowFirstName)
+            self.currentUserTable.setItem(i, 2, rowLastName)
+            self.currentUserTable.setItem(i, 3, rowEmail)
+            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))
+                rowEmail.setBackground(QColor.fromRgb(230, 241, 245))
+            i += 1
+
+        self.currentUserTable.horizontalHeader().setStretchLastSection(True)
+
+    # Updates ui with information supplied by signal
+    def updateParams(self):
+        self.parent.generalSettings['name'] = self.nameField.text()
+        self.parent.generalSettings['date'] = self.dateField.text()
+        self.parent.generalSettings['type'] = self.typeField.text()
+        self.parent.generalSettings['description'] = self.descField.text()
diff --git a/src/python/dm/aps_beamline_tools/gui/initialTab.py b/src/python/dm/aps_beamline_tools/gui/initialTab.py
index 9fb8a7caf4a9d010adf577addfd4bf018b062de7..4a667e8cef89d2f7c6a12a4d7268c0ca4fca3f05 100644
--- a/src/python/dm/aps_beamline_tools/gui/initialTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/initialTab.py
@@ -26,17 +26,17 @@ class InitialTab(QWidget):
         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))
+        manageBtn.clicked.connect(lambda: self.parent.setTab(1))
         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))
+        viewBtn.clicked.connect(lambda: self.parent.setTab(2))
         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))
+        viewBtn.clicked.connect(lambda: self.parent.setTab(3))
         grid.addWidget(viewBtn, 2, 5)
         grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 6)
 
@@ -45,5 +45,3 @@ class InitialTab(QWidget):
         self.initialTabWidget = QWidget()
         self.initialTabWidget.setLayout(grid)
 
-    def setTab(self, tab):
-        self.parent.stackedLayout.setCurrentIndex(tab)
diff --git a/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py b/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
index d3ad7b8d19bb7e74af2ef5de010484897a5015a9..1030f57bf99a385e243567bb64ab55929749a296 100644
--- a/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
@@ -1,7 +1,8 @@
 #!/usr/bin/env python
 
 from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
-    QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView, QComboBox, QVBoxLayout
+    QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView, QComboBox, QVBoxLayout, QHBoxLayout, \
+    QFontMetrics, QTableView, QStandardItemModel, QStandardItem
 from PyQt4.QtCore import Qt
 from dmApiFactory import DmApiFactory
 from objects.userInfo import UserInfo
@@ -25,53 +26,42 @@ class ManageUsersTab(QWidget):
         lbl = QLabel(self.stationName + ' User Management', self)
         lbl.setAlignment(Qt.AlignCenter)
         lbl.setFont(labelFont)
-        grid.addWidget(lbl, 0, 0, 1, 4)
+        grid.addWidget(lbl, 0, 0, 1, 3)
 
         backBtn = QPushButton('Back', self)
-        backBtn.clicked.connect(lambda: self.setTab(1))
+        backBtn.clicked.connect(lambda: self.parent.setTab(6))
         backBtn.setMinimumWidth(100)
         grid.addWidget(backBtn, 1, 2, Qt.AlignRight)
 
-        #grid.addItem(QSpacerItem(750, 40, QSizePolicy.Maximum, QSizePolicy.Minimum), 2, 0)
-        #grid.addItem(QSpacerItem(750, 40, QSizePolicy.Maximum, QSizePolicy.Minimum), 2, 2, 1, 5)
+        self.currentUserTable = QTableWidget()
+        self.availableUserTable = QTableView()
+        self.availableUserTableModel = QStandardItemModel()
+        self.availableUserTable.setModel(self.availableUserTableModel)
+        moveUserBtn = QPushButton('<->', self)
+        moveUserBtn.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
 
         currentLabel = QLabel('Current Users', self)
         currentLabel.setAlignment(Qt.AlignCenter)
-        #grid.addWidget(currentLabel, 3, 0)
+        currentLabel.setFixedHeight(30)
         self.userDropdown = QComboBox(self)
-        self.userDropdown.setMaximumWidth(400)
+        self.userDropdown.currentIndexChanged.connect(self.updateUsers)
+        self.userDropdown.setMaximumWidth(250)
         self.updateDropdown()
 
-        self.currentUserTable = QTableWidget()
-        self.availableUserTable = QTableWidget()
-        moveUserBtn = QPushButton('<->', self)
-        moveUserBtn.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
-        #moveUserBtn.clicked.connect(self.moveUsers)
-        #grid.addWidget(moveUserBtn, 4, 1)
-        #grid.addWidget(self.availableUserTable, 4, 2, 1, 2)
-        #grid.addItem(QSpacerItem(20, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding), 4, 3, 1, 1)
-
-        startDaqBtn = QPushButton('Start DAQ', self)
-        startDaqBtn.clicked.connect(lambda: self.setTab(0))
-        startDaqBtn.setMinimumWidth(150)
-        startDaqBtn.setMaximumWidth(200)
-        startDaqBtn.setFixedHeight(40)
-        #grid.addWidget(startDaqBtn, 5, 0, Qt.AlignCenter)
-
-        startUploadBtn = QPushButton('Start Upload', self)
-        startUploadBtn.clicked.connect(lambda: self.setTab(0))
-        startUploadBtn.setMinimumWidth(150)
-        startUploadBtn.setMaximumWidth(200)
-        startUploadBtn.setFixedHeight(40)
-        #grid.addWidget(startUploadBtn, 5, 2, 1, 5, Qt.AlignCenter)
+        saveUsersBtn = QPushButton('Save and Return', self)
+        saveUsersBtn.clicked.connect(lambda: self.parent.setTab(0))
+        saveUsersBtn.setFixedHeight(40)
 
         grid.addItem(QSpacerItem(20, 10, QSizePolicy.Expanding, QSizePolicy.Minimum), 6, 0)
 
+        hRow1 = QHBoxLayout()
+        hRow1.addWidget(self.currentUserTable)
+        hRow1.addWidget(moveUserBtn)
+        hRow1.addWidget(self.availableUserTable)
+
         vColumn1 = QVBoxLayout()
         vColumn1.addWidget(currentLabel)
         vColumn1.addWidget(self.currentUserTable)
-        vColumn1.addWidget(startDaqBtn)
-        vColumn1.setAlignment(startDaqBtn, Qt.AlignCenter)
         grid.addLayout(vColumn1, 2, 0)
 
         vColumn2 = QVBoxLayout()
@@ -81,10 +71,12 @@ class ManageUsersTab(QWidget):
         vColumn3 = QVBoxLayout()
         vColumn3.addWidget(self.userDropdown, Qt.AlignCenter)
         vColumn3.addWidget(self.availableUserTable)
-        vColumn3.addWidget(startUploadBtn)
-        vColumn3.setAlignment(startUploadBtn, Qt.AlignCenter)
         grid.addLayout(vColumn3, 2, 2)
 
+
+
+        grid.addWidget(saveUsersBtn, 4, 0, 1, 3, Qt.AlignCenter)
+
         self.manageUsersTabWidget = QWidget()
         self.manageUsersTabWidget.setLayout(grid)
     
@@ -93,28 +85,10 @@ class ManageUsersTab(QWidget):
         self.proposalList = self.experimentPropApi.listBeamlineProposals()
         self.userDropdown.addItem('All Users', -1)
         for proposal in self.proposalList:
-            self.userDropdown.addItem(proposal['title'], proposal['id'])
-
-    # Resizes the horizontal headers to fit the screen
-    def resizeTable(self, width):
-        totalWidths = sum(self.colWidths)
-        #if self.availableUserTable.verticalScrollBar().isVisible():
-        #    newSize = [column * (width - 490) / totalWidths for column in self.colWidths]
-        #else:
-        #    newSize = [column * (width - 470) / totalWidths for column in self.colWidths]
-        #for i, column in enumerate(newSize):
-        #    self.availableUserTable.horizontalHeader().resizeSection(i, column)
-        #print 4
-        #if self.currentUserTable.verticalScrollBar().isVisible():
-        #    newSize = [column * (width - 470) / totalWidths for column in self.colWidths]
-        #else:
-        #    newSize = [column * (width - 489) / totalWidths for column in self.colWidths]
-        #for i, column in enumerate(newSize):
-        #    self.currentUserTable.horizontalHeader().resizeSection(i, column)
-
-    # Used to change between tabs
-    def setTab(self, tab):
-        self.parent.stackedLayout.setCurrentIndex(tab)
+            fm = QFontMetrics(QFont("times", 12))
+            elidedText = fm.elidedText(proposal['title'], Qt.ElideRight, 250)
+            self.userDropdown.addItem(elidedText, proposal['id'])
+
 
     # Expands the given row to fit the size of its content
     def expandRow(self, row, column, table):
@@ -126,11 +100,11 @@ class ManageUsersTab(QWidget):
         id = self.userDropdown.itemData(self.userDropdown.currentIndex(), Qt.UserRole)
         if id != -1:
             proposal = self.experimentPropApi.getBeamlineProposal(id)
-            self.availableUserTable.setRowCount(min(len(proposal['experimenters'] + 1, 101)))
+            self.availableUserTable.model().setRowCount(len(proposal['experimenters']))
             allUsers = proposal['experimenters']
         else:
             allUsers = self.userApi.getUsers()
-            self.availableUserTable.setRowCount(len(allUsers))
+            self.availableUserTable.model().setRowCount(len(allUsers))
         objectAllUsers = []
         for x in allUsers:
             try:
@@ -140,34 +114,32 @@ class ManageUsersTab(QWidget):
                     continue
                 else:
                     objectAllUsers.append(UserInfo(x['badge'], x['firstName'], x['id'],  x['lastName'], ''))
-        self.availableUserTable.setColumnCount(4)
-        self.colWidths = (70, 70, 70, 125)
-        for i, size in enumerate(self.colWidths):
-            self.availableUserTable.horizontalHeader().resizeSection(i, size)
+        self.availableUserTable.model().setColumnCount(4)
+        self.availableUserTable.horizontalHeader().setStretchLastSection(True)
+        self.availableUserTable.setSelectionBehavior(QAbstractItemView.SelectRows)
         self.availableUserTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
-        self.availableUserTable.setHorizontalHeaderLabels('Badge;First;Last;Email;'.split(';'))
-        self.availableUserTable.cellDoubleClicked.connect(lambda row, column: self.expandRow(row, column, self.availableUserTable))
+        self.availableUserTable.model().setHorizontalHeaderLabels('Badge;First;Last;Email;'.split(';'))
+        self.availableUserTable.doubleClicked.connect(lambda row, column: self.expandRow(row, column, self.availableUserTable))
 
         i = 0
         currentIDs = [x.getID() for x in self.parent.currentUsers]
         for experimenter in objectAllUsers:
             if experimenter.getID() in currentIDs:
-                self.availableUserTable.removeRow(i)
+                self.availableUserTable.model().removeRow(i)
                 continue
-
-            rowBadge = QTableWidgetItem(experimenter.getBadge())
+            rowBadge = QStandardItem(experimenter.getBadge())
             if rowBadge is None:
                 continue
             rowBadge.setData(Qt.UserRole, experimenter.getID())
-            rowFirstName = QTableWidgetItem(experimenter.getFirstName())
-            rowLastName = QTableWidgetItem(experimenter.getLastName())
-            rowEmail = QTableWidgetItem(experimenter.getEmail())
+            rowFirstName = QStandardItem(experimenter.getFirstName())
+            rowLastName = QStandardItem(experimenter.getLastName())
+            rowEmail = QStandardItem(experimenter.getEmail())
             if rowEmail is None:
-                rowEmail = QTableWidgetItem('')
-            self.availableUserTable.setItem(i, 0, rowBadge)
-            self.availableUserTable.setItem(i, 1, rowFirstName)
-            self.availableUserTable.setItem(i, 2, rowLastName)
-            self.availableUserTable.setItem(i, 3, rowEmail)
+                rowEmail = QStandardItem('')
+            self.availableUserTable.model().setItem(i, 0, rowBadge)
+            self.availableUserTable.model().setItem(i, 1, rowFirstName)
+            self.availableUserTable.model().setItem(i, 2, rowLastName)
+            self.availableUserTable.model().setItem(i, 3, rowEmail)
             if (i % 2) == 0:
                 rowBadge.setBackground(QColor.fromRgb(230, 241, 245))
                 rowFirstName.setBackground(QColor.fromRgb(230, 241, 245))
@@ -178,8 +150,7 @@ class ManageUsersTab(QWidget):
         # Set up the current users table
         self.currentUserTable.setRowCount(len(self.parent.currentUsers))
         self.currentUserTable.setColumnCount(4)
-        for i, size in enumerate(self.colWidths):
-            self.currentUserTable.horizontalHeader().resizeSection(i, size)
+        self.currentUserTable.setSelectionBehavior(QAbstractItemView.SelectRows)
         self.currentUserTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.currentUserTable.setHorizontalHeaderLabels('Badge;First;Last;Email;'.split(';'))
         self.currentUserTable.cellDoubleClicked.connect(lambda row, column: self.expandRow(row, column, self.currentUserTable))
@@ -206,28 +177,24 @@ class ManageUsersTab(QWidget):
             i += 1
 
         self.currentUserTable.horizontalHeader().setStretchLastSection(True)
-        self.availableUserTable.horizontalHeader().setStretchLastSection(True)
-
 
     # Moves users from one table to the other
-    #def moveUsers(self):
-        #for selection in self.availableUserTable.selectedItems():
-	    #  userID = self.availableUserTable.item(selection.row(), 0).data(Qt.UserRole)
+    def moveUsers(self):
+        for selection in self.availableUserTable.model().selectedItems():
+            userID = self.availableUserTable.model().item(selection.row(), 0).data(Qt.UserRole)
 
-	    #selectedAvailable = [self.availableUserTable.item(x.row(), 0).data(Qt.UserRole) for x in self.availableUserTable.selectedItems()]
-        #currentAvailable = [self.currentUserTable.item(x.row(), 0).data(Qt.UserRole) for x in self.currentUserTable.selectedItems()]
+        selectedAvailable = [self.availableUserTable.model().item(x.row(), 0).data(Qt.UserRole) for x in self.availableUserTable.model().selectedItems()]
+        currentAvailable = [self.currentUserTable.item(x.row(), 0).data(Qt.UserRole) for x in self.currentUserTable.selectedItems()]
 
-        #for id in selectedAvailable:
-        # SHOULD I GET THE USER FROM THE ALLUSERS LIST, IF SO HOW SHOULD I PARSE BY ID?
-        #  self.parent.currentUsers.append(self.userApi.getUserById(id))
+        for id in selectedAvailable:
+            self.parent.currentUsers.append(self.userApi.getUserById(id))
 
-        #    for id in currentAvailable:
-        # AGAIN A PARSING PROBLEM, SHOULD I INSTEAD HAVE THE LIST ONLY BE OF IDs?
-        # THIS WOULD HANDLE PARSING BUT WOULD CAUSE THE NEED FOR DYNAMIC API CALLS.(Probably the best way to do this)
-        #  self.parent.currentUsers.remove(
+        for id in currentAvailable:
+            self.parent.currentUsers.remove()
+          #self.parent.currentUsers.remove(
 
         #selectedAvailable = [x.row(0).text() for x in self.availableUserTable.selectedItems()]
         #currentAvailable = self.currentUserTable.item(self.currentUserTable.currentRow(), 0)
 
-
-
+    def addFilter(self):
+        self.updateUsers
diff --git a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
index b288356a76ad2b3ded65143cf9f6ef14f318fe4a..149d4f526cde6f3213cd7731226f90ec41c10624 100644
--- a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
@@ -25,7 +25,7 @@ class UploadsTab(QWidget):
 
         # lambda allows the passing of variables
         backBtn = QPushButton('Back', self)
-        backBtn.clicked.connect(lambda: self.setTab(0))
+        backBtn.clicked.connect(lambda: self.parent.setTab(0))
         backBtn.setMaximumWidth(100)
         grid.addWidget(backBtn, 1, 4)
 
@@ -37,12 +37,12 @@ class UploadsTab(QWidget):
 
         grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
         addBtn = QPushButton('Start New', self)
-        addBtn.clicked.connect(lambda: self.setTab(0))
+        addBtn.clicked.connect(lambda: self.parent.setTab(0))
         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.clicked.connect(lambda: self.parent.setTab(0))
         modBtn.setMinimumWidth(150)
         grid.addWidget(modBtn, 4, 3)
         grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
@@ -56,9 +56,6 @@ class UploadsTab(QWidget):
         self.uploadList = self.experimentDaqApi.listUploads()
         self.tableWidget.setRowCount(len(self.uploadList))
         self.tableWidget.setColumnCount(3)
-        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)
@@ -78,19 +75,8 @@ class UploadsTab(QWidget):
                 rowNumFiles.setBackground(QColor.fromRgb(230, 241, 245))
             i += 1
 
-    def setTab(self, tab):
-        self.parent.stackedLayout.setCurrentIndex(tab)
 
     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)