 
     var isFullWidth: Bool {
         switch self {
-        case .badge,
+        case .announcement,
+             .artistInviteBubble,
+             .artistInviteControls,
+             .artistInviteGuide,
+             .artistInviteHeader,
+             .artistInviteSubmissionsButton,
+             .badge,
+             .categoryList,
              .categoryPromotionalHeader,
-             .categoryList,
              .createComment,
+             .editorial,
+             .emptyStream,
              .fullWidthSpacer,
+             .header,
              .inviteFriends,
-             .onboardingInviteFriends,
-             .emptyStream,
              .loadMoreComments,
              .noPosts,
              .notification,
+             .onboardingInviteFriends,
              .pagePromotionalHeader,
-             .announcement,
-             .artistInviteBubble,
-             .artistInviteHeader,
-             .artistInviteSubmissionsButton,
-             .artistInviteControls,
-             .artistInviteGuide,
-             .editorial,
              .profileHeader,
              .profileHeaderGhost,
              .search,
              .seeMoreComments,
              .streamLoading,
-             .header,
              .tallHeader,
              .userAvatars,
              .userListItem:
             return true
         case .categoryCard,
-             .selectableCategoryCard,
              .commentHeader,
              .embed,
+             .image,
+             .placeholder,
+             .selectableCategoryCard,
+             .spacer,
              .streamFooter,
              .streamHeader,
-             .image,
-             .placeholder,
-             .spacer,
              .text,
              .toggle,
              .unknown:


    var reuseIdentifier: String {
        switch self {
        case .badge: return BadgeCell.reuseIdentifier
        case .categoryCard: return CategoryCardCell.reuseIdentifier
        case .categoryPromotionalHeader, .pagePromotionalHeader: return CategoryHeaderCell.reuseIdentifier
        case .selectableCategoryCard: return CategoryCardCell.selectableReuseIdentifier
        case .categoryList: return CategoryListCell.reuseIdentifier
        case .commentHeader, .streamHeader: return StreamHeaderCell.reuseIdentifier
        case .createComment: return StreamCreateCommentCell.reuseIdentifier
        case .embed: return StreamEmbedCell.reuseEmbedIdentifier
        case .emptyStream: return EmptyStreamCell.reuseEmbedIdentifier
        case .streamFooter: return StreamFooterCell.reuseIdentifier
        case .image: return StreamImageCell.reuseIdentifier
        case .inviteFriends, .onboardingInviteFriends: return StreamInviteFriendsCell.reuseIdentifier
        case .loadMoreComments: return StreamLoadMoreCommentsCell.reuseIdentifier
        case .noPosts: return NoPostsCell.reuseIdentifier
        case .notification: return NotificationCell.reuseIdentifier
        case .placeholder: return "Placeholder"
        case .announcement: return AnnouncementCell.reuseIdentifier
        case .artistInviteBubble: return ArtistInviteBubbleCell.reuseIdentifier
        case .artistInviteHeader: return ArtistInviteHeaderCell.reuseIdentifier
        case .artistInviteSubmissionsButton: return ArtistInviteSubmissionsButtonCell.reuseIdentifier
        case .artistInviteControls: return ArtistInviteControlsCell.reuseIdentifier
        case .artistInviteGuide: return ArtistInviteGuideCell.reuseIdentifier
        case let .editorial(kind): return kind.reuseIdentifier
        case .profileHeader: return ProfileHeaderCell.reuseIdentifier
        case .profileHeaderGhost: return ProfileHeaderGhostCell.reuseIdentifier
        case .search: return SearchStreamCell.reuseIdentifier
        case .seeMoreComments: return StreamSeeMoreCommentsCell.reuseIdentifier
        case .spacer: return "StreamSpacerCell"
        case .fullWidthSpacer: return "StreamSpacerCell"
        case .streamLoading: return StreamLoadingCell.reuseIdentifier
        case .text: return StreamTextCell.reuseIdentifier
        case .header: return TextHeaderCell.reuseIdentifier
        case .tallHeader: return TextHeaderCell.reuseIdentifier
        case .toggle: return StreamToggleCell.reuseIdentifier
        case .unknown: return "StreamUnknownCell"
        case .userAvatars: return UserAvatarsCell.reuseIdentifier


    var oneColumnHeight: CGFloat {
        switch self {
        case .announcement:
            return 200
        case .artistInviteHeader:
            return ArtistInviteHeaderCell.Size.headerImageHeight + ArtistInviteHeaderCell.Size.totalTextHeight
        case .artistInviteSubmissionsButton:
            return ArtistInviteSubmissionsButtonCell.Size.height
        case .badge:
            return 64
        case .categoryCard, .selectableCategoryCard:
            let width = UIWindow.windowWidth()
            let aspect = CategoryCardCell.Size.aspect
            return ceil(width / aspect)
        case .categoryPromotionalHeader, .pagePromotionalHeader:
            return 150
        case .categoryList:
            return CategoryListCell.Size.height
        case .commentHeader,
             .inviteFriends,
             .onboardingInviteFriends,
             .seeMoreComments:
                return 60
        case .createComment:
            return 75
        case .editorial:
            let width = UIWindow.windowWidth()
            let aspect = EditorialCell.Size.aspect
            let maxHeight: CGFloat = UIWindow.windowHeight() - 256
            let height = min(ceil(width / aspect), maxHeight)
            return height + 1
        case let .emptyStream(height):
            return height
        case let .fullWidthSpacer(height):
            return height
        case .header:
            return 30
        case .loadMoreComments:
            return StreamLoadMoreCommentsCell.Size.height
        case .noPosts:
            return 215
        case .notification:
            return 117
        case .search:
            return 68
        case let .spacer(height):
            return height
        case .streamLoading,
             .userAvatars:
                return 50
        case .streamFooter:
            return 44
        case .streamHeader:
            return 70
        case .tallHeader:
            return 75
        case .toggle:
