diff --git a/src/ROCKparams.cpp b/src/ROCKparams.cpp
index 680bb6e1c74c400847e801569284b803906452fe..f46477b05fee568e016a00ae540b0888b6393d73 100755
--- a/src/ROCKparams.cpp
+++ b/src/ROCKparams.cpp
@@ -324,7 +324,7 @@ void ROCKparams::initFromMainOptsArgs(int argc,char ** argv) {
     // static int PE_separately=1;
     float proba=k_max_collision_proba;
 
-    while((i = getopt(argc, argv, "i:o:l:k:c:C:n:vhq:m:f:")) != -1) {
+    while((i = getopt(argc, argv, "i:o:l:k:c:C:n:vhpq:m:f:")) != -1) {
         switch(i) {
             case 0:
                 break;
@@ -369,6 +369,9 @@ void ROCKparams::initFromMainOptsArgs(int argc,char ** argv) {
             	char * t;
             	//cout<<optarg<<endl;
                 nb_k_mers=strtoul(optarg,&t,10);break; // number of distinct k-mers
+            case 'p':
+            	process_PE_separately=1;
+            	break;
             case 'v':
                 verbose_mode=1;
                 break;
diff --git a/src/ROCKparams.h b/src/ROCKparams.h
index bea282b6eb4f6fe9b215ba7898f0b6daf9a30f9f..137a638c804fb70d9e48bf374082c552df6f19be 100755
--- a/src/ROCKparams.h
+++ b/src/ROCKparams.h
@@ -70,6 +70,7 @@ class ROCKparams{
     unsigned long nb_k_mers; // expected number of k-mers in input data if specified by the user.
     int k; // size of the k-mers
     int verbose_mode;
+    int process_PE_separately;
     std::string input_file,output_file;
 
     std::vector<IO_fq_files> single_files;
@@ -119,6 +120,7 @@ public:
         qual_thres.nucl_score_threshold=k_phred_32;
         qual_thres.k=k;
         verbose_mode=0;
+        process_PE_separately=0;
         cms_size=0;
         expected_collision_proba=0.0; //! collision probability that is computed at the beginning of ROCK from the expected number of distinct k-mers provided by the user.
         parms.max_filter_size=getNodePhysMemory()/100.0*90-defaultGRPMAXSize; // Prefer not to use all the machine's memory
diff --git a/src/read_utils.cpp b/src/read_utils.cpp
index 7f71a4f1bf94fab0bfa93e2ecfbdd1b3a6bcdf75..5770ce6c8d724842fc43d09c1fe61332eb2ab47b 100644
--- a/src/read_utils.cpp
+++ b/src/read_utils.cpp
@@ -149,7 +149,7 @@ void getDNASeqstr(FqBaseBackend* fq_files_be [],
 
 }
 
-void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2]) {
+void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2], int process_PE_separately) {
     int nb_expected_k_mers,nb_expected_k_mers_PE1,nb_expected_k_mers_PE2=0;
     nb_expected_k_mers_PE1=a_seqs[0].length+1-k;
     nbrKmerDecompo.idx_start_PE2=0;
@@ -162,7 +162,7 @@ void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKme
     read_p.getKMerNumbers(start_dna_str,a_seqs[0].length,nbrKmerDecompo.single_or_PE_val);
 
     if (a_seqs[1].length) { // case of PE reads
-    	nbrKmerDecompo.idx_start_PE2=nb_expected_k_mers_PE1;
+    	if (process_PE_separately) nbrKmerDecompo.idx_start_PE2=nb_expected_k_mers_PE1;
         start_dna_str=a_seqs[1].fq_record_buf+a_seqs[1].start_idx;
         read_p.getKMerNumbers(start_dna_str,a_seqs[1].length,nbrKmerDecompo.single_or_PE_val);
     }
diff --git a/src/read_utils.h b/src/read_utils.h
index aaf064f60a3308ea1054a94fea9302b1ef1485dc..c9b6aecf0cbd607973d7b01d2d432bcc6da7f99e 100644
--- a/src/read_utils.h
+++ b/src/read_utils.h
@@ -36,6 +36,6 @@ void getDNASeqstr(FqBaseBackend* [],
 
 void init_DnaSeqStr(DnaSeqStr * dna_seq);
 
-void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2]);
+void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2],int process_PE_separately=0);
 
 #endif /* READ_UTILS_H_ */