implemented union