This is getting might complex!