quite repetitive, maybe some factory like helper can help here?