diff --git a/modules/io/src/mol/mmcif_writer.cc b/modules/io/src/mol/mmcif_writer.cc
index 022eda6ad05e06465c68cabaefbf91b24dfdf1f2..9322195764a44290d6e60a3164c508599d47d204 100644
--- a/modules/io/src/mol/mmcif_writer.cc
+++ b/modules/io/src/mol/mmcif_writer.cc
@@ -864,7 +864,7 @@ namespace {
                    const std::vector<ost::io::MMCifWriterEntity>& entity_info) {
     std::vector<ost::io::StarWriterValue> ent_data(2);
     for(size_t entity_idx = 0; entity_idx < entity_info.size(); ++entity_idx) {
-      ent_data[0] = ost::io::StarWriterValue::FromInt(entity_idx);
+      ent_data[0] = ost::io::StarWriterValue::FromInt(entity_idx+1);
       ent_data[1] = ost::io::StarWriterValue::FromString(entity_info[entity_idx].type);
       entity_ptr->AddData(ent_data);
     }
@@ -876,7 +876,7 @@ namespace {
     for(size_t entity_idx = 0; entity_idx < entity_info.size(); ++entity_idx) {
       for(auto asym_id : entity_info[entity_idx].asym_ids) {
         asym_data[0] = ost::io::StarWriterValue::FromString(asym_id);
-        asym_data[1] = ost::io::StarWriterValue::FromInt(entity_idx);
+        asym_data[1] = ost::io::StarWriterValue::FromInt(entity_idx+1);
         struct_asym_ptr->AddData(asym_data);
       }
     }
@@ -889,7 +889,7 @@ namespace {
       if(entity_info[entity_idx].is_poly) {
         const std::vector<String>& mon_ids = entity_info[entity_idx].mon_ids;
         for(size_t mon_idx = 0; mon_idx < mon_ids.size(); ++mon_idx) {
-          entity_poly_seq_data[0] = ost::io::StarWriterValue::FromInt(entity_idx);
+          entity_poly_seq_data[0] = ost::io::StarWriterValue::FromInt(entity_idx+1);
           entity_poly_seq_data[1] = ost::io::StarWriterValue::FromString(mon_ids[mon_idx]);
           entity_poly_seq_data[2] = ost::io::StarWriterValue::FromInt(mon_idx+1);
           entity_poly_seq_ptr->AddData(entity_poly_seq_data);
@@ -903,7 +903,7 @@ namespace {
     std::vector<ost::io::StarWriterValue> entity_poly_data(4);
     for(size_t entity_idx = 0; entity_idx < entity_info.size(); ++entity_idx) {
       if(entity_info[entity_idx].is_poly) {
-        entity_poly_data[0] = ost::io::StarWriterValue::FromInt(entity_idx);
+        entity_poly_data[0] = ost::io::StarWriterValue::FromInt(entity_idx+1);
         entity_poly_data[1] = ost::io::StarWriterValue::FromString(entity_info[entity_idx].poly_type);
         std::stringstream seq;
         std::stringstream seq_can;
@@ -956,7 +956,7 @@ namespace {
     std::vector<ost::io::StarWriterValue> branch_data(2);
     for(size_t i = 0; i < entity_infos.size(); ++i) {
       if(entity_infos[i].type == "branched") {
-        branch_data[0] = ost::io::StarWriterValue::FromInt(i);
+        branch_data[0] = ost::io::StarWriterValue::FromInt(i+1);
         branch_data[1] = ost::io::StarWriterValue::FromString(entity_infos[i].branch_type);
         pdbx_entity_branch_ptr->AddData(branch_data);
       }
@@ -1066,7 +1066,7 @@ namespace {
                                       tmp,
                                       false,
                                       entity_info);
-          Feed_atom_site(atom_site, chain_name, entity_id, entity_info[entity_id],
+          Feed_atom_site(atom_site, chain_name, entity_id+1, entity_info[entity_id],
                          tmp);
         } else {
           // this should not happen...
@@ -1100,14 +1100,14 @@ namespace {
                                       *poly_chains[i],
                                       false,
                                       entity_info);
-          Feed_atom_site(atom_site, chain_name, entity_id, entity_info[entity_id],
+          Feed_atom_site(atom_site, chain_name, entity_id+1, entity_info[entity_id],
                          *poly_chains[i]);
           // still check whether we're dealing with poly here, we could have a
           // lonely amino acid that ends up as non-poly and doesn't need
           // pdbx_poly_seq_scheme
           if(entity_info[entity_id].is_poly) {
             Feed_pdbx_poly_seq_scheme(pdbx_poly_seq_scheme, chain_name,
-                                      entity_id, entity_info[entity_id], *poly_chains[i]);
+                                      entity_id+1, entity_info[entity_id], *poly_chains[i]);
           }
         }
       }
@@ -1125,7 +1125,7 @@ namespace {
                                     W_chain,
                                     false,
                                     entity_info);
-        Feed_atom_site(atom_site, chain_name, entity_id, entity_info[entity_id],
+        Feed_atom_site(atom_site, chain_name, entity_id+1, entity_info[entity_id],
                        W_chain);
       }
       // process sugar chain
@@ -1147,7 +1147,7 @@ namespace {
                                     Z_chain,
                                     false,
                                     entity_info);
-        Feed_atom_site(atom_site, chain_name, entity_id, entity_info[entity_id],
+        Feed_atom_site(atom_site, chain_name, entity_id+1, entity_info[entity_id],
                        Z_chain);
       }
     }
@@ -1200,11 +1200,11 @@ namespace {
                                     res_list,
                                     true,
                                     entity_info);
-        Feed_atom_site(atom_site, chain_name, entity_id, entity_info[entity_id],
+        Feed_atom_site(atom_site, chain_name, entity_id+1, entity_info[entity_id],
                        res_list);
         if(entity_info[entity_id].is_poly) {
           Feed_pdbx_poly_seq_scheme(pdbx_poly_seq_scheme, chain_name,
-                                    entity_id, entity_info[entity_id], res_list);
+                                    entity_id+1, entity_info[entity_id], res_list);
         }
       }
     } else {