this is a very complex and interesting question =P