implemented the main propose function