protected override object SetUpMember(int index, object member)
            {
                using(Synchronizer.Lock(this.m_Service)) {
                    using(this.m_Bucket.Lock()) {
                        DeckTraversalModel traversal = ((DeckTraversalModel) member);

                        if((traversal.Deck.Disposition & DeckDisposition.Remote) != 0) {
                            // A remote deck, perform deck matching
                            // TODO: DeckMatching Should Occur Here
                            // CURRENT IMPLEMENTATION ASSUMES THERE WAS NO MATCH
                            // NOTE: All DeckTraversals need to ability to be linked since with
                            //       deckmatching any deck can become associated with a remote deck.
                            DeckTraversalModel matchedDeckTraversal = null;

                            // Perform the DeckMatching (NOTE: Does Nothing Right Now)
                            matchedDeckTraversal = DeckMatcherService.MatchDeck( traversal );

                            if( matchedDeckTraversal == null ) {
                                // No Matched Deck Found
                                // TODO: Evaluate whether it's a good idea to copy the existing traversal's Id.
                                matchedDeckTraversal = new LinkedDeckTraversalModel(this.m_Service.m_EventQueue, traversal.Id, this.m_Service.m_Model, traversal);

                                // Create the DeckMatch
                                this.m_Bucket.DeckMatches.Add( new DeckPairModel( matchedDeckTraversal, traversal ) );
                            }
                            else {
                                // Create the DeckMatch
                                this.m_Bucket.DeckMatches.Add( new DeckPairModel( matchedDeckTraversal, traversal ) );
                                // NOTE: Don't have to add to the workspace because it's already there.
                                // NOTE: But should we remove and replace with a LinkedDeckTraversalModel??
                            }

                            traversal = matchedDeckTraversal;
                        }
                        else {
                            // Not a remote deck, just add to the workspace
                            this.m_Bucket.DeckTraversals.Add(traversal);
                        }

                        return traversal;
                    }
                }
            }
        private void HandleCurrentDeckTraversalChanged(object sender, PropertyEventArgs args_)
        {
            using (Synchronizer.Lock(this)) {
                DeckTraversalModel current;
                if (this.m_Instructor == null) {
                    current = null;
                }
                else {
                    using (Synchronizer.Lock(this.m_Instructor.SyncRoot)) {
                        current = this.m_Instructor.CurrentDeckTraversal;
                    }
                }

                using (this.m_Model.Workspace.Lock()) {
                    if (current != null) {
                        // Check the workspace to see if there exists a linkedDeckTraversal for this ID
                        foreach (DeckTraversalModel model in this.m_Model.Workspace.DeckTraversals) {
                            if (model.Id == current.Id) {
                                current = model;
                                break;
                            }
                        }
                    }
                }

                // TODO: Only set the current deck traversal if navigation is unlinked.
                bool isInstructor = false;
                using (Synchronizer.Lock(this.m_Model.Participant.SyncRoot)) {
                    if (this.m_Model.Participant.Role is InstructorModel) {
                        isInstructor = true;
                    }
                }

                DeckTraversalModel dtm = null;
                if ((current is LinkedDeckTraversalModel) || (isInstructor) || (current == null)) {
                    dtm = current;
                }
                else {
                    dtm = new LinkedDeckTraversalModel(this.m_EventQueue, current.Id, this.m_Model, current);
                }

                using (this.m_Model.Workspace.Lock()) {
                    this.m_Model.Workspace.CurrentDeckTraversal.Value = dtm;
                }
            }
        }