Basically, whenever you find yourself doing something like: MyDataStructure data; call1(data); // modifies data call2(data); // modifies data call3(data); // modifies data you have a big indicator, that the data structure should indeed be a class: MyDataClass dataClass; dataClass.call1(); dataClass.call2(); dataClass.call3(); If the call chain depends on a given order, encapsulate this in the class as well: MyDataClass { public void doComplexTask() { call1(); if (resultIsNotGood) throw Excepion... call2(); ... // you get it } private call1() { ... } // not exposed any more }