Added some more implementation, doesn't actually compile right now