# What is the best way to pass on options? [duplicate]

Say I have two functions which take the same set of options, e.g.

Options[f1] = {a -> 1};
Options[f2] = {a -> 1};


Now, f1 calls f2 and passes its options on, like this:

f1[options:OptionsPattern[]] := f2[options]


Where f2 may be

f2[options:OptionsPattern[]] := OptionValue[a]


Usually ,this works fine:

f1[]
(* 1 *)

f1[a -> 2]
(* 2 *)


But SetOptions does not behave the way I want it to:

SetOptions[f1, a -> 2];
f1[]
(* 1 *)


I understand that this does not work because options is empty, and f2 never asks for the Options of f1. One way to solve this is to define

f2[options:OptionsPattern[]] :=  If[
Length[{options}] > 0,
OptionValue[a],
OptionValue[f1, a]
]


Now, after SetOptions[f1, a -> 2]

f1[]
(* 2 *)

f1[a -> 3]
(* 3 *)


Is there a better way to do this?