             
             self.branding = try? values.decode(CoreAPI.Branding.self, forKey: .branding)
             
-            if let catalogId = try? values.decode(PublicationIdentifier.self, forKey: .catalogId) {
-                let catalogPageNum = try? values.decode(Int.self, forKey: .catalogPage)
-                // incito publications have pageNum == 0, so in that case set to nil.
-                // otherwise, convert pageNum to index.
-                self.publication = PublicationPageReference(
-                    id: catalogId,
-                    pageIndex: catalogPageNum.flatMap({ $0 > 0 ? $0 - 1 : nil })
-                )
-            }
+            self.publicationId = try? values.decode(PublicationIdentifier.self, forKey: .catalogId)
+            // incito publications have pageNum == 0, so in that case set to nil.
+            // otherwise, convert pageNum to index.
+            self.publicationPageIndex = (try? values.decode(Int.self, forKey: .catalogPage)).flatMap({ $0 > 0 ? $0 - 1 : nil })
+            self.incitoViewId = try? values.decode(String.self, forKey: .catalogViewId)
             
             self.dealerId = try? values.decode(CoreAPI.Dealer.Identifier.self, forKey: .dealerId)
             self.storeId = try? values.decode(CoreAPI.Store.Identifier.self, forKey: .storeId)

            case branding
            case catalogId          = "catalog_id"
            case catalogPage        = "catalog_page"
            case dealerId           = "dealer_id"
            case storeId            = "store_id"
        }

        
        public var branding: Branding?
        
        public var publicationId: PublicationIdentifier?
        public var publicationPageIndex: Int?
        public var incitoViewId: String?
        
        public var dealerId: CoreAPI.Dealer.Identifier?
        /// The id of the nearest store. Only available if a location was provided when fetching the offer.
        public var storeId: CoreAPI.Store.Identifier?
