private void Initialize()
        {
            ChelloClient client = TrelloClientFactory.Get();

            _lists = client.Lists.ForBoard(_boardId).ToDictionary(l => l.Id, l => new ActivityList(l.Id, l.Name));

            IEnumerable<CardUpdateAction> updates =  client.CardUpdates.ForBoard(_boardId, new { limit = 1000, filter = "createCard,updateCard,moveCardFromBoard,moveCardToBoard,updateBoard,createBoard" });

            // HACK: Board closing doesn't come back properly - assume if last activity was a board update it is board closing
            // may give strange results for some cases
            if (updates.FirstOrDefault().Type.Equals("updateBoard", StringComparison.OrdinalIgnoreCase))
            {
                BoardClosed = DateTime.Parse(updates.FirstOrDefault().Date);
            }

            foreach (var update in updates.Reverse())
            {
                switch (update.Type.ToUpperInvariant())
                {
                    case "CREATECARD":
                        _lists.AddCard(update.Data.List.Id, new ActivityCard(update.Data.Card, DateTime.Parse(update.Date)));
                        break;
                    case "UPDATECARD":
                        if (update.Data.ListAfter != null && update.Data.ListBefore != null)
                        {
                            _lists.FinishCard(update.Data.ListBefore.Id, update.Data.Card, DateTime.Parse(update.Date));
                            _lists.AddCard(update.Data.ListAfter.Id, new ActivityCard(update.Data.Card, DateTime.Parse(update.Date)));
                        }
                        else if (update.Data.Card.Closed)
                        {
                            foreach (string listId in _lists.Keys)
                            {
                                _lists.FinishCard(listId, update.Data.Card, DateTime.Parse(update.Date));
                            }
                        }
                        break;
                    case "MOVECARDFROMBOARD":
                        foreach (string listId in _lists.Keys)
                        {
                            _lists.FinishCard(listId, update.Data.Card, DateTime.Parse(update.Date));
                        }
                        break;
                    case "CREATEBOARD":
                        BoardOpened = DateTime.Parse(update.Date);
                        LimitedByApi = false;
                        break;
                }

                if (LimitedByApi && updates.Any())
                {
                    BoardOpened = DateTime.Parse(updates.LastOrDefault().Date);
                }

                if (update.Data.Card != null)
                {
                    foreach (string listId in _lists.Keys)
                    {
                        _lists.UpdatePoints(listId, update.Data.Card);
                    }
                }
            }
        }