diff --git a/req/include/req_compactor.hpp b/req/include/req_compactor.hpp
index 4c9f3b6..a55183e 100755
--- a/req/include/req_compactor.hpp
+++ b/req/include/req_compactor.hpp
@@ -109,7 +109,7 @@
   T* items_;
 
   bool ensure_enough_sections();
-  size_t compute_compaction_range(uint32_t secs_to_compact) const;
+  std::pair<uint32_t, uint32_t> compute_compaction_range(uint32_t secs_to_compact) const;
   void grow(size_t new_capacity);
   void ensure_space(size_t num);
 
diff --git a/req/include/req_compactor_impl.hpp b/req/include/req_compactor_impl.hpp
index 96db673..067196c 100755
--- a/req/include/req_compactor_impl.hpp
+++ b/req/include/req_compactor_impl.hpp
@@ -169,12 +169,10 @@
 template<typename T, bool H, typename C, typename A>
 void req_compactor<T, H, C, A>::grow(size_t new_capacity) {
   T* new_items = allocator_.allocate(new_capacity);
-  const size_t from = H ? capacity_ - num_items_ : 0;
-  const size_t to = H ? capacity_ : num_items_;
   size_t new_i = H ? new_capacity - num_items_ : 0;
-  for (size_t i = from; i < to; ++i, ++new_i) {
-    new (new_items + new_i) T(std::move(items_[i]));
-    items_[i].~T();
+  for (auto it = begin(); it != end(); ++it, ++new_i) {
+    new (new_items + new_i) T(std::move(*it));
+    (*it).~T();
   }
   allocator_.deallocate(items_, capacity_);
   items_ = new_items;
@@ -237,23 +235,21 @@
 void req_compactor<T, H, C, A>::compact(req_compactor& next) {
   // choose a part of the buffer to compact
   const uint32_t secs_to_compact = std::min(static_cast<uint32_t>(count_trailing_zeros_in_u32(~state_) + 1), static_cast<uint32_t>(num_sections_));
-  const size_t compaction_range = compute_compaction_range(secs_to_compact);
-  const uint32_t compact_from = compaction_range & 0xFFFFFFFFLL; // low 32
-  const uint32_t compact_to = compaction_range >> 32; // high 32
-  if (compact_to - compact_from < 2) throw std::logic_error("compaction range error");
+  auto compaction_range = compute_compaction_range(secs_to_compact);
+  if (compaction_range.second - compaction_range.first < 2) throw std::logic_error("compaction range error");
 
   if ((state_ & 1) == 1) { coin_ = !coin_; } // for odd flip coin;
   else { coin_ = req_random_bit(); } // random coin flip
 
-  const auto num = (compact_to - compact_from) / 2;
+  const auto num = (compaction_range.second - compaction_range.first) / 2;
   next.ensure_space(num);
   auto next_middle = H ? next.begin() : next.end();
   auto next_empty = H ? next.begin() - num : next.end();
-  promote_evens_or_odds(begin() + compact_from, begin() + compact_to, coin_, next_empty);
+  promote_evens_or_odds(begin() + compaction_range.first, begin() + compaction_range.second, coin_, next_empty);
   next.num_items_ += num;
   std::inplace_merge(next.begin(), next_middle, next.end(), C());
-  for (size_t i = compact_from; i < compact_to; ++i) (*(begin() + i)).~T();
-  num_items_ -= compact_to - compact_from;
+  for (size_t i = compaction_range.first; i < compaction_range.second; ++i) (*(begin() + i)).~T();
+  num_items_ -= compaction_range.second - compaction_range.first;
 
   ++state_;
   ensure_enough_sections();
@@ -274,13 +270,13 @@
 }
 
 template<typename T, bool H, typename C, typename A>
-size_t req_compactor<T, H, C, A>::compute_compaction_range(uint32_t secs_to_compact) const {
+std::pair<uint32_t, uint32_t> req_compactor<T, H, C, A>::compute_compaction_range(uint32_t secs_to_compact) const {
   uint32_t non_compact = get_nom_capacity() / 2 + (num_sections_ - secs_to_compact) * section_size_;
   // make compacted region even
   if (((num_items_ - non_compact) & 1) == 1) ++non_compact;
   const size_t low = H ? 0 : non_compact;
   const size_t high = H ? num_items_ - non_compact : num_items_;
-  return (high << 32) + low;
+  return std::pair<uint32_t, uint32_t>(low, high);
 }
 
 template<typename T, bool H, typename C, typename A>
