func logic