make this abstract?