diff --git a/src/python/dm/aps_beamline_tools/gui/addExperiment.py b/src/python/dm/aps_beamline_tools/gui/addExperiment.py
index 2d579d1cd17edbfc2c3a4f68f326e081e6798e4c..569212f79f2a48a19856bd6deba3278c8649c7b1 100644
--- a/src/python/dm/aps_beamline_tools/gui/addExperiment.py
+++ b/src/python/dm/aps_beamline_tools/gui/addExperiment.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 AddExperimentTab(QWidget):
@@ -95,21 +96,22 @@ class AddExperimentTab(QWidget):
     def startProposal(self):
         id = self.tableWidget.item(self.tableWidget.currentRow(), 0).data(Qt.UserRole)
         proposal = self.experimentPropApi.getBeamlineProposal(id)
-        self.parent.currentUsers = proposal
+        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)
+    #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)
 
     def toggleDetails(self):
         if self.detailBtn.text() == 'Hide Details':
@@ -134,6 +136,7 @@ class AddExperimentTab(QWidget):
         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))
+        self.detailsTable.horizontalHeader().setStretchLastSection(True)
 
         i = 0
         for experimenter in proposal['experimenters']:
diff --git a/src/python/dm/aps_beamline_tools/gui/daqsTab.py b/src/python/dm/aps_beamline_tools/gui/daqsTab.py
index fb69ba280ac6acc46bb715f05cfba43cc97a1735..5b849c7ada5d7bd2af7b7467cf148341faaf1718 100644
--- a/src/python/dm/aps_beamline_tools/gui/daqsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/daqsTab.py
@@ -61,6 +61,7 @@ class DaqsTab(QWidget):
         self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.tableWidget.setHorizontalHeaderLabels('ID;Data Directory;Number of Files;'.split(';'))
         self.tableWidget.cellDoubleClicked.connect(self.expandRow)
+        self.tableWidget.horizontalHeader().setStretchLastSection(True)
 
         i = 0
         for daq in self.daqList:
@@ -83,12 +84,12 @@ class DaqsTab(QWidget):
         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)
+    #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/dmStationUi.py b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
index 90e78c8402c3ee76a2ca734fb7a4f69a589d125a..edd38d4377bfec176ccf9763592bb8cfeb5faacf 100755
--- a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
+++ b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
@@ -28,7 +28,7 @@ class DmStationUi(QMainWindow):
         self.setGeometry(0, 0, 800, 400)
 
         # Variable to hold the user instances
-        self.currentUsers = {}  ####HOW DO I MAKE THIS AN INSTANCE OF A PROPOSAL WITH NO DATA
+        self.currentUsers = []
  
         # Create a stacked layout to connect the various pages
         self.stackedLayout = QStackedLayout()
@@ -75,35 +75,26 @@ class DmStationUi(QMainWindow):
         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 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 == 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())
-        elif newIndex == 4:
-            AddExperimentTab.resizeTable(self.addExperimentTab, self.geometry().width())
-        elif newIndex == 5:
+        if newIndex == 5:
             ManageUsersTab.updateUsers(self.manageUsersTab)
-            ManageUsersTab.resizeTable(self.manageUsersTab, 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 0d0df005a673e4796132265c77695ea079c45cae..5a82339a9911133cb4e511a1153f87b7e2a86acc 100644
--- a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
@@ -65,6 +65,7 @@ class ExperimentsTab(QWidget):
         self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.tableWidget.setHorizontalHeaderLabels('Name;Description;Start Date;'.split(';'))
         self.tableWidget.cellDoubleClicked.connect(self.expandRow)
+        self.tableWidget.horizontalHeader().setStretchLastSection(True)
 
         i = 0
         for experiment in self.experimentList:
@@ -89,12 +90,12 @@ class ExperimentsTab(QWidget):
         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 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)
 
diff --git a/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py b/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
index 80a409fc7ab7bdd29fa42994dbbb6b45c8c6b03f..d3ad7b8d19bb7e74af2ef5de010484897a5015a9 100644
--- a/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/manageUsersTab.py
@@ -1,9 +1,11 @@
 #!/usr/bin/env python
 
 from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
-    QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView, QComboBox
+    QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView, QComboBox, QVBoxLayout
 from PyQt4.QtCore import Qt
 from dmApiFactory import DmApiFactory
+from objects.userInfo import UserInfo
+
 
 # Define the experiments tab content:
 class ManageUsersTab(QWidget):
@@ -23,53 +25,70 @@ class ManageUsersTab(QWidget):
         lbl = QLabel(self.stationName + ' User Management', self)
         lbl.setAlignment(Qt.AlignCenter)
         lbl.setFont(labelFont)
-        grid.addWidget(lbl, 0, 0, 1, 7)
+        grid.addWidget(lbl, 0, 0, 1, 4)
 
         backBtn = QPushButton('Back', self)
         backBtn.clicked.connect(lambda: self.setTab(1))
         backBtn.setMinimumWidth(100)
-        grid.addWidget(backBtn, 1, 5, 1, 2, Qt.AlignCenter)
+        grid.addWidget(backBtn, 1, 2, Qt.AlignRight)
 
-        grid.addItem(QSpacerItem(750, 40, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 0)
-        grid.addItem(QSpacerItem(950, 40, QSizePolicy.Expanding, QSizePolicy.Minimum), 2, 2, 1, 5)
+        #grid.addItem(QSpacerItem(750, 40, QSizePolicy.Maximum, QSizePolicy.Minimum), 2, 0)
+        #grid.addItem(QSpacerItem(750, 40, QSizePolicy.Maximum, QSizePolicy.Minimum), 2, 2, 1, 5)
 
         currentLabel = QLabel('Current Users', self)
         currentLabel.setAlignment(Qt.AlignCenter)
-        grid.addWidget(currentLabel, 3, 0)
+        #grid.addWidget(currentLabel, 3, 0)
         self.userDropdown = QComboBox(self)
         self.userDropdown.setMaximumWidth(400)
         self.updateDropdown()
-        grid.addWidget(self.userDropdown, 3, 2, 1, 5, Qt.AlignCenter)
 
         self.currentUserTable = QTableWidget()
         self.availableUserTable = QTableWidget()
-        grid.addWidget(self.currentUserTable, 4, 0, 1, 1)
         moveUserBtn = QPushButton('<->', self)
-        moveUserBtn.setFixedSize(40, 40)
-        moveUserBtn.clicked.connect(self.moveUsers)
-        grid.addWidget(moveUserBtn, 4, 1)
-        grid.addWidget(self.availableUserTable, 4, 2, 1, 5)
-        grid.addItem(QSpacerItem(20, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding), 4, 3, 1, 1)
+        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)
+        #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)
+        #grid.addWidget(startUploadBtn, 5, 2, 1, 5, Qt.AlignCenter)
 
         grid.addItem(QSpacerItem(20, 10, QSizePolicy.Expanding, QSizePolicy.Minimum), 6, 0)
 
+        vColumn1 = QVBoxLayout()
+        vColumn1.addWidget(currentLabel)
+        vColumn1.addWidget(self.currentUserTable)
+        vColumn1.addWidget(startDaqBtn)
+        vColumn1.setAlignment(startDaqBtn, Qt.AlignCenter)
+        grid.addLayout(vColumn1, 2, 0)
+
+        vColumn2 = QVBoxLayout()
+        vColumn2.addWidget(moveUserBtn)
+        grid.addLayout(vColumn2, 2, 1)
+
+        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)
+
         self.manageUsersTabWidget = QWidget()
         self.manageUsersTabWidget.setLayout(grid)
-
+    
+    # Populates the dropdown with available proposals
     def updateDropdown(self):
         self.proposalList = self.experimentPropApi.listBeamlineProposals()
         self.userDropdown.addItem('All Users', -1)
@@ -79,19 +98,19 @@ class ManageUsersTab(QWidget):
     # 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 - 480) / totalWidths for column in self.colWidths]
-        for i, column in enumerate(newSize):
-            self.availableUserTable.horizontalHeader().resizeSection(i, column)
-
-        if self.currentUserTable.verticalScrollBar().isVisible():
-            newSize = [column * (width - 490) / totalWidths for column in self.colWidths]
-        else:
-            newSize = [column * (width - 480) / totalWidths for column in self.colWidths]
-        for i, column in enumerate(newSize):
-            self.currentUserTable.horizontalHeader().resizeSection(i, column)
+        #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):
@@ -101,39 +120,49 @@ class ManageUsersTab(QWidget):
     def expandRow(self, row, column, table):
         table.resizeRowToContents(row)
 
+    # Populates both user tables with their corresponding users
     def updateUsers(self):
         # Setup the available users table
         id = self.userDropdown.itemData(self.userDropdown.currentIndex(), Qt.UserRole)
         if id != -1:
             proposal = self.experimentPropApi.getBeamlineProposal(id)
-            self.availableUserTable.setRowCount(len(proposal['experimenters']))
+            self.availableUserTable.setRowCount(min(len(proposal['experimenters'] + 1, 101)))
             allUsers = proposal['experimenters']
         else:
             allUsers = self.userApi.getUsers()
             self.availableUserTable.setRowCount(len(allUsers))
+        objectAllUsers = []
+        for x in allUsers:
+            try:
+                objectAllUsers.append(UserInfo(x['badge'], x['firstName'], x['id'],  x['lastName'], x['email']))
+            except KeyError, key:
+                if key.message == 'badge':
+                    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.setEditTriggers(QAbstractItemView.NoEditTriggers)
-        self.availableUserTable.setHorizontalHeaderLabels('Badge;First Name;Last Name;Email;'.split(';'))
+        self.availableUserTable.setHorizontalHeaderLabels('Badge;First;Last;Email;'.split(';'))
         self.availableUserTable.cellDoubleClicked.connect(lambda row, column: self.expandRow(row, column, self.availableUserTable))
 
         i = 0
-        currentIDs = [x['id'] for x in self.parent.currentUsers['experimenters']]
-        for experimenter in allUsers:
-            if experimenter['id'] in currentIDs:
+        currentIDs = [x.getID() for x in self.parent.currentUsers]
+        for experimenter in objectAllUsers:
+            if experimenter.getID() in currentIDs:
                 self.availableUserTable.removeRow(i)
                 continue
-            try:
-                rowBadge = QTableWidgetItem(experimenter['badge'])
-            except KeyError:
+
+            rowBadge = QTableWidgetItem(experimenter.getBadge())
+            if rowBadge is None:
                 continue
-            rowFirstName = QTableWidgetItem(experimenter['firstName'])
-            rowLastName = QTableWidgetItem(experimenter['lastName'])
-            try:
-                rowEmail = QTableWidgetItem(experimenter['email'])
-            except KeyError:
+            rowBadge.setData(Qt.UserRole, experimenter.getID())
+            rowFirstName = QTableWidgetItem(experimenter.getFirstName())
+            rowLastName = QTableWidgetItem(experimenter.getLastName())
+            rowEmail = QTableWidgetItem(experimenter.getEmail())
+            if rowEmail is None:
                 rowEmail = QTableWidgetItem('')
             self.availableUserTable.setItem(i, 0, rowBadge)
             self.availableUserTable.setItem(i, 1, rowFirstName)
@@ -147,21 +176,22 @@ class ManageUsersTab(QWidget):
             i += 1
 
         # Set up the current users table
-        self.currentUserTable.setRowCount(len(self.parent.currentUsers['experimenters']))
+        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.setEditTriggers(QAbstractItemView.NoEditTriggers)
-        self.currentUserTable.setHorizontalHeaderLabels('Badge;First Name;Last Name;Email;'.split(';'))
+        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['experimenters']:
-            rowBadge = QTableWidgetItem(experimenter['badge'])
-            rowFirstName = QTableWidgetItem(experimenter['firstName'])
-            rowLastName = QTableWidgetItem(experimenter['lastName'])
+        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['email'])
+                rowEmail = QTableWidgetItem(experimenter.getEmail())
             except KeyError:
                 rowEmail = QTableWidgetItem('')
             self.currentUserTable.setItem(i, 0, rowBadge)
@@ -175,8 +205,29 @@ class ManageUsersTab(QWidget):
                 rowEmail.setBackground(QColor.fromRgb(230, 241, 245))
             i += 1
 
-    def moveUsers(self):
-        temp = self.availableUserTable.selectedItems()[0].row()
-        temp2 = self.availableUserTable.item(temp, 0)
-        selectedAvailable = [x.row(0).text() for x in self.availableUserTable.selectedItems()]
-        currentAvailable = self.currentUserTable.item(self.currentUserTable.currentRow(), 0)
+        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)
+
+	    #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()]
+
+        #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 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(
+
+        #selectedAvailable = [x.row(0).text() for x in self.availableUserTable.selectedItems()]
+        #currentAvailable = self.currentUserTable.item(self.currentUserTable.currentRow(), 0)
+
+
+
diff --git a/src/python/dm/aps_beamline_tools/gui/objects/__init__.py b/src/python/dm/aps_beamline_tools/gui/objects/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/python/dm/aps_beamline_tools/gui/objects/userInfo.py b/src/python/dm/aps_beamline_tools/gui/objects/userInfo.py
new file mode 100644
index 0000000000000000000000000000000000000000..df65e6306e62666c4600e6067aab0457fdf253fd
--- /dev/null
+++ b/src/python/dm/aps_beamline_tools/gui/objects/userInfo.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+
+# User Object Class
+class UserInfo:
+    def __init__(self, badge, firstName, id, lastName, email=None, lastUpdate=None, username=None, isLocalUser=None):
+        self.badge = badge
+        if email == None:
+            self.email = ''
+        else:
+            self.email = email
+        self.firstName = firstName
+        self.id = id
+        self.isLocalUser = isLocalUser
+        self.lastName = lastName
+        self.lastUpdate = lastUpdate
+        self.username = username
+
+    def getBadge(self):
+        return self.badge
+
+    def getEmail(self):
+        return self.email
+
+    def getFirstName(self):
+        return self.firstName
+
+    def getID(self):
+        return self.id
+
+    def getIsLocalUser(self):
+        return self.isLocalUser
+
+    def getLastName(self):
+        return self.lastName
+
+    def getLastUpdate(self):
+        return self.lastUpdate
+
+    def getUsername(self):
+        return self.username
+
diff --git a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
index c1147a2be8e251cc8e09acbe1905022e8756dfb7..b288356a76ad2b3ded65143cf9f6ef14f318fe4a 100644
--- a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
@@ -62,6 +62,7 @@ class UploadsTab(QWidget):
         self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.tableWidget.setHorizontalHeaderLabels('ID;Data Directory;Number of Files;'.split(';'))
         self.tableWidget.cellDoubleClicked.connect(self.expandRow)
+        self.tableWidget.horizontalHeader().setStretchLastSection(True)
 
         i = 0
         for upload in self.uploadList:
@@ -84,12 +85,12 @@ class UploadsTab(QWidget):
         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)
+    #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)