added novel algorithm