recursive conversion
added fromMap constructor