diff --git a/src/finn/transformation/fpgadataflow/derive_characteristic.py b/src/finn/transformation/fpgadataflow/derive_characteristic.py
index 1bd7182ca8333fc0bdc5b588e1dfd66b78060d8d..b821059bc87b51f6df9b9390405c6dd06ac80d74 100644
--- a/src/finn/transformation/fpgadataflow/derive_characteristic.py
+++ b/src/finn/transformation/fpgadataflow/derive_characteristic.py
@@ -111,6 +111,9 @@ class DeriveCharacteristic(NodeLocalTransformation):
                     del io_dict["outputs"]["out"]
                     io_dict["outputs"]["out0"] = []
                     io_dict["outputs"]["out1"] = []
+                    # n_outs is total of output streams
+                    # so multiply expected by 2
+                    n_outs *= 2
                 elif node.op_type == "AddStreams_Batch":
                     io_dict["inputs"]["in1"] = [0 for i in range(n_inps)]
 
@@ -280,10 +283,14 @@ class DeriveFIFOSizes(NodeLocalTransformation):
                 prod_chrc = np.asarray(prod_chrc).reshape(2, -1)[1]
                 # find consumers
                 model = self.ref_input_model
-                consumers = model.find_consumers(node.output[0])
-                # compute FIFO depth for each consumer
                 out_fifo_depths = []
-                for cons_node in consumers:
+                for output_name in node.output:
+                    cons_node = model.find_consumer(output_name)
+                    if cons_node is None:
+                        # could be final node, will be overridden if so
+                        # need an entry in the list anyway
+                        out_fifo_depths.append(2)
+                        continue
                     cons = registry.getCustomOp(cons_node)
                     cons_chrc = cons.get_nodeattr("io_characteristic")
                     cons_chrc = np.asarray(cons_chrc).reshape(2, -1)[0]
@@ -302,8 +309,9 @@ class DeriveFIFOSizes(NodeLocalTransformation):
                 # set output FIFO depth for this (producing) node
                 # InsertFIFO looks at the max of (outFIFODepth, inFIFODepth)
                 # for each tensor
-                prod.set_nodeattr("outFIFODepth", out_fifo_depths[0])
-                # used only for multi-consumer. nodes
+                if len(out_fifo_depths) > 0:
+                    prod.set_nodeattr("outFIFODepth", out_fifo_depths[0])
+                # used only for multi-producer nodes
                 prod.set_nodeattr("outFIFODepths", out_fifo_depths)
 
             except KeyError: