diff --git a/modules/io/pymod/export_mmcif_io.cc b/modules/io/pymod/export_mmcif_io.cc
index 908886257ab5b99bd97acf8946a39c0fb18c9188..8fbb402a15a1c1f85822890972606a6491097a55 100644
--- a/modules/io/pymod/export_mmcif_io.cc
+++ b/modules/io/pymod/export_mmcif_io.cc
@@ -167,7 +167,8 @@ void export_mmcif_io()
   	     MMCifInfoStructRefSeqDifPtr>("MMCifInfoStructRefSeqDif", no_init)
   	.add_property("details", make_function(&MMCifInfoStructRefSeqDif::GetDetails, 
   				        return_value_policy<copy_const_reference>()))
-  	.add_property("rnum", &MMCifInfoStructRefSeqDif::GetRNum)
+  	.add_property("seq_rnum", &MMCifInfoStructRefSeqDif::GetSeqRNum)
+  	.add_property("db_rnum", &MMCifInfoStructRefSeqDif::GetDBRNum)
   ;
   class_<MMCifInfoBioUnit>("MMCifInfoBioUnit", init<>())
     .def("SetDetails", &MMCifInfoBioUnit::SetDetails)
diff --git a/modules/io/src/mol/mmcif_info.cc b/modules/io/src/mol/mmcif_info.cc
index d99b0bd2254cb0dec07d04f6fe7b31ca6ad8bc49..c8565a2e809ff1f84b182b9f73e4cacd1866c509 100644
--- a/modules/io/src/mol/mmcif_info.cc
+++ b/modules/io/src/mol/mmcif_info.cc
@@ -64,9 +64,10 @@ MMCifInfoStructRef::GetAlignedSeq(const String& aid) const
 }
 
 MMCifInfoStructRefSeqDifPtr 
-MMCifInfoStructRefSeq::AddDif(int rnum, const String& details)
+MMCifInfoStructRefSeq::AddDif(int seq_rnum, int db_rnum, const String& details)
 {
-	MMCifInfoStructRefSeqDifPtr d(new MMCifInfoStructRefSeqDif(rnum, details));
+	MMCifInfoStructRefSeqDifPtr d(new MMCifInfoStructRefSeqDif(seq_rnum, db_rnum,
+				                                                     details));
 	difs_.push_back(d);
 	return d;
 }
diff --git a/modules/io/src/mol/mmcif_info.hh b/modules/io/src/mol/mmcif_info.hh
index 81d5b546aa95402303ab7cdcde95e5ec177a14a9..38e49f58bec9420e353088d8a7858908be887456 100644
--- a/modules/io/src/mol/mmcif_info.hh
+++ b/modules/io/src/mol/mmcif_info.hh
@@ -669,7 +669,8 @@ public:
   int GetSeqEnd() const { return seq_end_; }
   int GetDBBegin() const { return db_begin_; }
   int GetDBEnd() const { return db_end_; }
-  MMCifInfoStructRefSeqDifPtr AddDif(int seq_num, const String& details);
+  MMCifInfoStructRefSeqDifPtr AddDif(int seq_num, int db_num, 
+  		                               const String& details);
   const std::vector<MMCifInfoStructRefSeqDifPtr>& GetDifs() const { return difs_; }
 private:
 	String   id_;
@@ -683,12 +684,14 @@ private:
 
 class DLLEXPORT_OST_IO MMCifInfoStructRefSeqDif {
 public:
-	MMCifInfoStructRefSeqDif(int rnum, const String& details): 
-		rnum_(rnum), details_(details) {}
-	int GetRNum() const { return rnum_;}
+	MMCifInfoStructRefSeqDif(int seq_rnum, int db_rnum, const String& details): 
+		seq_rnum_(seq_rnum), db_rnum_(db_rnum), details_(details) {}
+	int GetSeqRNum() const { return seq_rnum_;}
+	int GetDBRNum() const { return db_rnum_; }
 	const String& GetDetails() const { return details_; }
 private:
-	int    rnum_;
+	int    seq_rnum_;
+	int    db_rnum_;
 	String details_;
 };
 
diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc
index f2b66ee35e195a0b196504cbd0f11c7879b779a6..c58c14c8dc433bbfc6c2948b8fa97dc57fa358d6 100644
--- a/modules/io/src/mol/mmcif_reader.cc
+++ b/modules/io/src/mol/mmcif_reader.cc
@@ -30,6 +30,12 @@
 
 namespace ost { namespace io {
 
+
+bool is_undef(StringRef value)
+{
+	return value.size()==1 && (value[0]=='?' || value[0]=='.');
+}
+
 MMCifReader::MMCifReader(std::istream& stream, mol::EntityHandle& ent_handle,
                          const IOProfile& profile):
   StarParser(stream, true), profile_(profile), ent_handle_(ent_handle)
@@ -321,7 +327,8 @@ bool MMCifReader::OnBeginLoop(const StarLoopDesc& header)
 	} else if (header.GetCategory()=="struct_ref_seq_dif") {
 		category_ = STRUCT_REF_SEQ_DIF;
   	this->TryStoreIdx(SRSD_ALIGN_ID, "align_id", header);
-  	this->TryStoreIdx(SRSD_RNUM, "seq_num", header);
+  	this->TryStoreIdx(SRSD_SEQ_RNUM, "seq_num", header);
+  	this->TryStoreIdx(SRSD_DB_RNUM, "pdbx_seq_db_seq_num", header);
   	indices_[SRSD_DETAILS]=header.GetIndex("details");
   	cat_available = true;
 	}
@@ -1480,10 +1487,21 @@ void MMCifReader::ParseStructRefSeq(const std::vector<StringRef>& columns)
 void MMCifReader::ParseStructRefSeqDif(const std::vector<StringRef>& columns)
 {
 	String aln_id=columns[indices_[SRSD_ALIGN_ID]].str();
-	std::pair<bool,int> rnum=this->TryGetInt(columns[indices_[SRSD_RNUM]],
-			                                     "_struct_ref_seq_dif.seq_num",
-			                                     profile_.fault_tolerant);
-	if (!rnum.first) {
+	std::pair<bool,int> db_rnum(true, -1);
+	if (!is_undef(columns[indices_[SRSD_DB_RNUM]])) {
+	  db_rnum=this->TryGetInt(columns[indices_[SRSD_DB_RNUM]],
+		    	                  "_struct_ref_seq_dif.pdbx_seq_db_seq_num",
+		                        profile_.fault_tolerant);
+	  
+	}
+	std::pair<bool,int> seq_rnum(true, -1);
+	if (!is_undef(columns[indices_[SRSD_SEQ_RNUM]])) {
+	  seq_rnum=this->TryGetInt(columns[indices_[SRSD_SEQ_RNUM]],
+		  	                     "_struct_ref_seq_dif.seq_num",
+			                       profile_.fault_tolerant);
+	  
+	}
+	if (!seq_rnum.first || !db_rnum.first) {
 		return;
 	}
   String details;
@@ -1494,7 +1512,7 @@ void MMCifReader::ParseStructRefSeqDif(const std::vector<StringRef>& columns)
   for (MMCifInfoStructRefs::iterator i=struct_refs_.begin(), 
  		  e=struct_refs_.end(); i!=e; ++i) { 
  	 if (MMCifInfoStructRefSeqPtr s=(*i)->GetAlignedSeq(aln_id)) {
-		 s->AddDif(rnum.second, details); 
+		 s->AddDif(seq_rnum.second, db_rnum.second, details); 
 		 found=true;
  	 	 break;
  	 }
diff --git a/modules/io/src/mol/mmcif_reader.hh b/modules/io/src/mol/mmcif_reader.hh
index 2a8f549ecffaaf0a5baa6ccf0234acdf7bd5970a..06215f56b9c0006843700921ef66b02c9e1dd0ad 100644
--- a/modules/io/src/mol/mmcif_reader.hh
+++ b/modules/io/src/mol/mmcif_reader.hh
@@ -433,7 +433,8 @@ private:
 	/// \enum items of the struct_ref_seq_dif category
 	typedef enum {
 		SRSD_ALIGN_ID,
-		SRSD_RNUM,
+		SRSD_SEQ_RNUM,
+		SRSD_DB_RNUM,
     SRSD_DETAILS
 	} StructRefSeqDifItems;
   /// \enum items of the pdbx_struct_assembly_gen category