diff --git a/DESCRIPTION b/DESCRIPTION
index f63fdc9ebf721671ca1579db996b6134601536b4..5172b2bb1d9e5ea8d1292f29679bce386e82bab8 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -63,6 +63,7 @@ Imports:
     tools,
     scales,
     parallel,
+    future,
     yaml,
     mzR,
     MSnbase,
diff --git a/R/extraction.R b/R/extraction.R
index 3f49abbc4d27a706efa6a888f28be01def975bb1..0fcd989bdbc6950ca35ab7a48d8279ef603981d5 100644
--- a/R/extraction.R
+++ b/R/extraction.R
@@ -19,6 +19,30 @@ load_raw_data<-function(fn,mode="inMemory") {
 }
 
 
+centroided1 <- function(ms) {
+    if (all(MSnbase::centroided(ms)) == T)
+        return(T) else {
+                      state <- MSnbase::isCentroided(ms)
+                      N <- length(state)
+                      fls <-length(which(state == F))
+                      if (fls/(1.*N) < 0.01) T else F
+                  }
+                                                         
+}
+
+centroided <- function(msvec) {
+    if (is.vector(msvec)) {
+        f <- list()
+        for (i in 1:length(msvec)) {
+            f[[i]] <- future::future(centroided1(msvec[[i]]))
+        }
+        lapply(f, FUN = future::value)
+    } else {
+        centroided1(msvec)
+    }
+    
+}
+
 acq_mz<-function(tabFn) {
     df<-read.csv(tabFn,
                  stringsAsFactors=F,