I have written a contract that has the mapping storage variable A & B. These variables get initialized with some values in constructor. A method getBalance returns the balance from mapping A & B. In the method I declared another mapping - thinking that it would give a compilation error (since mapping allowed for storage only). Instead it lead to a strange behavior - appears that the new local mapping overwrites mappingA. Result without local mapping (100, 200) as expected Result with local mapping (500, 200) <<< Why? /** Tested in Truffle/TestRPC **/ contract Mapping { mapping(address => uint) balancesA; mapping(address => uint) balancesB; function Mapping() { // constructor balancesA[msg.sender] = 100; balancesB[msg.sender] = 200; } function getBalance(address addr) returns(uint balanceA, uint balanceB) { // If these 2 lines are commented then behavior is as expected mapping(address => uint) balancers; balancers[msg.sender] = 500; return (balancesA[addr], balancesB[addr]); } }