diff --git wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js
index 150c37a3b..8a86f1e0e 100644
--- wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js
+++ wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js
@@ -14,9 +14,12 @@ jQuery(document).ready(function($){
 	camptix.models.Attendee = Backbone.Model.extend({
 		defaults: function() {
 			return {
+				id: null,
 				status: false,
+				sort: 'firstName',
 				avatar: '',
-				name: '',
+				firstName: '',
+				lastName: ''
 			}
 		},
 
@@ -162,7 +165,8 @@ jQuery(document).ready(function($){
 		 * Render the attendee list item.
 		 */
 		render: function() {
-			this.$el.html( this.template( this.model.toJSON() ) );
+			var attendeeData = _.extend( this.model.toJSON(), { sort: this.controller.filterSettings.sort } );
+			this.$el.html( this.template( attendeeData ) );
 			return this;
 		},
 
@@ -317,6 +321,7 @@ jQuery(document).ready(function($){
 
 		events: {
 			'fastClick .close': 'close',
+			'fastClick .filter-sort li': 'toggleSort',
 			'fastClick .filter-attendance li': 'toggleAttendance',
 			'fastClick .filter-tickets li': 'toggleTickets'
 		},
@@ -368,6 +373,17 @@ jQuery(document).ready(function($){
 			this.render();
 			this.controller.trigger( 'filter', this.filterSettings );
 		},
+
+        /**
+		 * Toggle sort order for tickets list
+         */
+        toggleSort: function( event ) {
+			var sortOrder = $( event.target ).data( 'sort' );
+			this.filterSettings.sort = sortOrder;
+			this.render();
+
+			this.controller.trigger( 'filter', this.filterSettings );
+		}
 	});
 
 	/**
@@ -382,6 +398,7 @@ jQuery(document).ready(function($){
 		events: {
 			'fastClick .dashicons-menu': 'menu',
 			'fastClick .submenu .search': 'searchView',
+			'fastClick .submenu .sort': 'sortView',
 			'fastClick .submenu .refresh': 'refresh',
 			'fastClick .submenu .filter': 'filterView'
 		},
@@ -398,7 +415,8 @@ jQuery(document).ready(function($){
 			this.filterSettings = {
 				'attendance': 'none',
 				'tickets': _camptixAttendanceTickets,
-				'search': ''
+				'search': '',
+				'sort': 'firstName'
 			};
 
 			this.render();
@@ -434,7 +452,7 @@ jQuery(document).ready(function($){
 				options = {};
 
 			// Dispose of the current collection and cache it for later use.
-			if ( 'undefined' != typeof this.collection ) {
+			if ( 'undefined' !== typeof this.collection ) {
 				this.collection.off( null, null, this );
 				this.cache.push( this.collection );
 			}
diff --git wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php
index 15b1ea915..9dc53fb95 100644
--- wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php
+++ wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php
@@ -19,21 +19,26 @@ $camptix_options = $camptix->get_options();
 		_camptixAttendanceTickets = [ <?php echo esc_js( implode( ', ', array_map( 'absint', wp_list_pluck( $camptix_tickets, 'ID' ) ) ) ); ?> ];
 	</script>
 
-	<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
+	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
 	<meta name="referrer" content="never" />
 </head>
 <body>
 	<script id="tmpl-attendee" type="text/template">
 		<div class="spinner-container"><span class="spinner"></span></div>
 		<a href="#" class="status toggle <# if ( data.status ) { #> yes <# } #>"><div class="dashicons dashicons-admin-users"></div></a>
-		<span class="name">
-			{{ data.name }}
-		</span>
+
+        <span class="name">
+            <# if ( 'lastName' == data.sort ) { #>
+                {{ data.lastName }}, {{ data.firstName }}
+            <# } else { #>
+                {{ data.firstName }} {{ data.lastName }}
+            <# } #>
+        </span>
 	</script>
 
 	<script id="tmpl-attendee-toggle" type="text/template">
 		<img src="{{ data.avatar }}" />
-		<p>Did <strong>{{ data.name }}</strong> attend <?php echo esc_html( $camptix_options['event_name'] ); ?>?</p>
+		<p>Did <strong>{{ data.firstName }} {{ data.lastName }}</strong> attend <?php echo esc_html( $camptix_options['event_name'] ); ?>?</p>
 
 		<div class="yes-no-container">
 			<a href="#" class="yes">Yes</a>
@@ -51,7 +56,7 @@ $camptix_options = $camptix->get_options();
 				<a href="#" class="dashicons dashicons-menu"></a>
 				<div class="submenu">
 					<a href="#" class="search">Search</a>
-					<a href="#" class="filter">Filter</a>
+					<a href="#" class="filter">Sort & Filter</a>
 					<a href="#" class="refresh">Refresh</a>
 				</div>
 			</div>
@@ -78,7 +83,14 @@ $camptix_options = $camptix->get_options();
 	<script id="tmpl-attendee-filter" type="text/template">
 		<a href="#" class="close dashicons dashicons-no"></a>
 		<div class="wrapper">
-			<h1>Filters</h1>
+            <h1>Sort & Filter</h1>
+
+            <h1 class="section-title">Sort Attendees By</h1>
+            <ul class="filter-sort section-controls">
+                <li data-sort="firstName" <# if ( data.sort == 'firstName' ) { #> class="selected" <# } #> >First Name</li>
+                <li data-sort="lastName" <# if ( data.sort == 'lastName' ) { #> class="selected" <# } #> >Last Name</li>
+                <li data-sort="orderDate" <# if ( data.sort == 'orderDate' ) { #> class="selected" <# } #> >Order Date</li>
+            </ul>
 
 			<h1 class="section-title">Attendance</h1>
 			<ul class="filter-attendance section-controls">
diff --git wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php
index 9707106be..90bfac115 100644
--- wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php
+++ wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php
@@ -70,7 +70,7 @@ class CampTix_Attendance extends CampTix_Addon {
 	}
 
 	/**
-	 * Synchronize an attendee model.
+	 * Synchronize a single attendee model.
 	 *
 	 * Sets are removes the attended flag for a given camptix_id.
 	 */
@@ -113,15 +113,37 @@ class CampTix_Attendance extends CampTix_Addon {
 		$ticket_ids = wp_list_pluck( $this->get_tickets(), 'ID' );
 
 		$query_args = array(
-			'post_type' => 'tix_attendee',
-			'post_status' => 'publish',
-			'orderby' => 'title',
-			'order' => 'ASC',
-			'paged' => $paged,
+			'post_type'      => 'tix_attendee',
+			'post_status'    => 'publish',
+			'orderby'        => 'title',
+			'order'          => 'ASC',
+			'paged'          => $paged,
 			'posts_per_page' => 50,
-			'meta_query' => '',
+			'meta_query'     => '',
 		);
 
+		/**
+		 * Sort Attendee Posts
+		 */
+		if ( ! empty( $_REQUEST['camptix_filters']['sort'] ) ) {
+		    switch ( $_REQUEST['camptix_filters']['sort'] ) {
+                case 'lastName':
+                    $query_args['orderby']  = 'meta_value';
+                    $query_args['meta_key'] = 'tix_last_name';
+                    break;
+                case 'orderDate':
+	                $query_args['orderby']  = 'date';
+	                $query_args['order']    = 'DESC';
+                    break;
+                case 'firstName':
+                default:
+                    // each $attendee->post_title is already First Lastname
+    			    break;
+		    }
+
+		    unset( $_REQUEST['camptix_filters']['sort'] );
+        }
+
 		$filters = array();
 		if ( ! empty( $_REQUEST['camptix_filters'] ) )
 			$filters = (array) $_REQUEST['camptix_filters'];
@@ -170,10 +192,10 @@ class CampTix_Attendance extends CampTix_Addon {
 	 * with an AJAX method.
 	 */
 	public function _make_object( $attendee ) {
-		$attendee = get_post( $attendee );
+        $attendee = get_post( $attendee );
 
 		$first_name = get_post_meta( $attendee->ID, 'tix_first_name', true );
-		$last_name = get_post_meta( $attendee->ID, 'tix_last_name', true );
+		$last_name  = get_post_meta( $attendee->ID, 'tix_last_name', true );
 		$avatar_url = sprintf( 'https://secure.gravatar.com/avatar/%s?s=160', md5( get_post_meta( $attendee->ID, 'tix_email', true ) ) );
 		$avatar_url = add_query_arg( 'd', 'https://secure.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=160', $avatar_url );
 
@@ -181,7 +203,8 @@ class CampTix_Attendance extends CampTix_Addon {
 
 		return array(
 			'id' => $attendee->ID,
-			'name' => sprintf( '%s %s', $first_name, $last_name ),
+			'firstName' => $first_name,
+			'lastName' => $last_name,
 			'avatar' => esc_url_raw( $avatar_url ),
 			'status' => $status,
 		);
@@ -249,6 +272,7 @@ class CampTix_Attendance extends CampTix_Addon {
 	 */
 	public function setup_sections( $sections ) {
 		$sections['attendance-ui'] = esc_html__( 'Attendance UI', 'wordcamporg' );
+
 		return $sections;
 	}
 
@@ -313,7 +337,7 @@ class CampTix_Attendance extends CampTix_Addon {
 	}
 
 	/**
-	 * Get CampTix Tickets
+	 * Get CampTix Tickets (not to be confused with Attendees)
 	 *
 	 * Returns an array of published tickets registered with CampTix.
 	 */
