So the naive way to set up a data structure like `struct` is, as the OP suggested, to simply used `DownValues` and/or `SubValues`. In the below, I use `SubValues`. Copying the [Wikipedia C language `struct` example][1] struct account { int account_number; char *first_name; char *last_name; float balance; }; struct account s; // Create new account labelled s s.account_number // access the account number In Mathematica, we can talk about an "instance" of `account` as account["s"] set and access its properties using `SubValues` account["s"]["account_number"] = 12345 account["s"]["account_number"] (* Returns: 12345 *) To make this a bit more robust, you should probably have a gentleman's agreement with your code to only access the "objects" using type checked instantiation and setting methods. Also, code for deletion of "objects" is easy to write by using `DeleteCases` on the `SubValues` of `account`. That said, I've written largish applications *for my own use* that do not bother with such niceties. [1]: http://en.wikipedia.org/wiki/Struct_%28C_programming_language%29