A method comprising: receiving an indication to perform data anonymization based on quasi attributes of a data set, wherein the data set includes both the quasi attributes and one or more sensitive attributes; recursively performing partitioning of the data set based on one or more of the quasi attributes until both a first anonymization threshold corresponding to the quasi attributes is satisfied and a second anonymization threshold corresponding to the one or more sensitive attributes is satisfied for each of a plurality of sub-partitions produced as a result of the partitioning, wherein the recursively performing partitioning of the data set is based on a calculation of a normalized certainty penalty, NCP, which measures information loss, wherein the NCP is calculated for the quasi attributes and used to recursively split the data set based on splitting one of the quasi attributes with the greatest NCP; and providing a resultant data set including a plurality of records of the data set corresponding to the plurality of sub-partitions that satisfy both the first anonymization threshold and the second anonymization threshold, wherein the first anonymization threshold is based on K-anonymity and indicates from how many other records that each record in one of the sub-partitions of the resultant data set is indistinguishable and wherein the second anonymization threshold is based on L-diversity and indicates a minimum number of sensitive values that exist in each sub-partition of the resultant data set, wherein the partitioning comprises checking whether both thresholds based on K-anonymity and L-diversity are satisfied for each sub-partition in parallel, providing a secondary threshold value which indicates a maximum acceptable information loss for K-anonymity and L-diversity, providing a notification or an error if the secondary threshold cannot be satisfied. receiving an indication to perform data anonymization based on quasi attributes of a data set, wherein the data set includes both the quasi attributes and one or more sensitive attributes; recursively performing partitioning of the data set based on one or more of the quasi attributes until both a first anonymization threshold corresponding to the quasi attributes is satisfied and a second anonymization threshold corresponding to the one or more sensitive attributes is satisfied for each of a plurality of sub-partitions produced as a result of the partitioning, wherein the recursively performing partitioning of the data set is based on a calculation of a normalized certainty penalty, NCP, which measures information loss, wherein the NCP is calculated for the quasi attributes and used to recursively split the data set based on splitting one of the quasi attributes with the greatest NCP; and providing a resultant data set including a plurality of records of the data set corresponding to the plurality of sub-partitions that satisfy both the first anonymization threshold and the second anonymization threshold, wherein the first anonymization threshold is based on K-anonymity and indicates from how many other records that each record in one of the sub-partitions of the resultant data set is indistinguishable and wherein the second anonymization threshold is based on L-diversity and indicates a minimum number of sensitive values that exist in each sub-partition of the resultant data set, wherein the first anonymization threshold is based on K-anonymity and indicates from how many other records that each record in one of the sub-partitions of the resultant data set is indistinguishable and wherein the second anonymization threshold is based on L-diversity and indicates a minimum number of sensitive values that exist in each sub-partition of the resultant data set, wherein the partitioning comprises checking whether both thresholds based on K-anonymity and L-diversity are satisfied for each sub-partition in parallel, providing a secondary threshold value which indicates a maximum acceptable information loss for K-anonymity and L-diversity, providing a notification or an error if the secondary threshold cannot be satisfied.