 				 pr-pair# (core/str "#" ~(name rname) "{") ", " "}" opts#
 				 (concat [~@(map #(list `vector (keyword %) %) base-fields)] 
 					 ~'__extmap))))
-		  ])]
+		  ])
+          [fpps pmasks] (prepare-protocol-masks env tagname impls)]
       `(do
 	 (~'defrecord* ~tagname ~hinted-fields ~pmasks)
-	 (extend-type ~tagname ~@(dt->et impls))))))
+	 (extend-type ~(with-meta tagname {:skip-protocol-flag fpps}) ~@(dt->et impls))))))
 
 (defn- build-positional-factory
   [rsym rname fields]

    (if-let [fpp-pbs (seq (keep fast-path-protocols
                                (map resolve
                                     (keys impl-map))))]
      (let [fpp-partitions (group-by first fpp-pbs)
            fpp-partitions (into {} (map (juxt key (comp (partial map peek) val))
                                         fpp-partitions))
            fpp-partitions (into {} (map (juxt key (comp (partial reduce core/bit-or) val))
                                         fpp-partitions))]
        (reduce (fn [ps p]
                  (update-in ps [p] (fnil identity 0)))
                fpp-partitions
                (range fast-path-protocol-partitions-count))))))

(defmacro deftype [t fields & impls]
  (let [adorn-params (fn [sig]

        fields (vec (map #(with-meta % nil) fields))
        base-fields fields
	fields (conj fields '__meta '__extmap (with-meta '__hash {:mutable true}))
	adorn-params (fn [sig]
                       (cons (vary-meta (second sig) assoc :cljs.compiler/fields fields)
                             (nnext sig)))
