Since `Firstname` is a string literal defined in the function scope, missing to explicitly define the data location sets it to `storage` by default (where the state variables are persisted) [1]. That assignment operation then looks for the data at the provided location, which in the example is not a valid `storage` reference. In order to solve the compilation error in the provided example, it is necessary to set the `memory` keyword, as pointed out by user _smarx_: `string memory Firstname = "Hello";`. The second snippet is valid, as of _Solidity_ version `0.4.25`. Given the provided code snippets, the following would be the aggregated code, to serve as reference (`SecondContract.sol`): pragma solidity ^0.4.25; contract UserRegistration { function getUserData(address userAddress) public constant returns(string, uint) { string memory Firstname = "Hello"; uint number=123; return( Firstname,number); } } contract SecondContract { function FetchDetail(address userAddress) public constant returns(string,uint ) { string memory data1; uint data2; UserRegistration ud=new UserRegistration(); (data1,data2)= ud.getUserData(userAddress); return(data1,data2); } } Deploying `SecondContract` and calling `FetchDetail` function with `0x0000000000000000000000000000000000000000` as argument returns: ``` string Hello uint256 123 ``` [1] https://solidity.readthedocs.io/en/v0.4.25/types.html#data-location Stay super, Javier