preliminary declarations and implementations added