If TCP/IP is a proper layered architecture why do we need to change all the applications in the application layer in order to change a bottom layer protocol IP from version 4 to version 6?
If the application is well-developed and really layered then it should not have to change. Unfortunately many applications use lower-layer details like IP addresses for access control, logging etc. In many cases understandable, but it does indeed break the layered architecture...
The basics are covered in http://www.stipv6.nl/whitepaper-ip-aspecten-software
And don't forget things like input validation with regular expressions and user interfaces that only handle IPv4 notation (providing four input boxes for the address or automatically inserting dots at certain places etc).