some support libraries for #18