diff --git a/memory_replay/Alloc.cpp b/memory_replay/Alloc.cpp
index e97dca0..f776f0f 100644
--- a/memory_replay/Alloc.cpp
+++ b/memory_replay/Alloc.cpp
@@ -31,6 +31,7 @@
     case memory_trace::CALLOC:
     case memory_trace::MEMALIGN:
     case memory_trace::THREAD_DONE:
+    case memory_trace::UNKNOWN:
       return false;
 
     case memory_trace::FREE:
diff --git a/memory_replay/MemoryTrace.cpp b/memory_replay/MemoryTrace.cpp
index e6d21df..c080a07 100644
--- a/memory_replay/MemoryTrace.cpp
+++ b/memory_replay/MemoryTrace.cpp
@@ -141,8 +141,9 @@
       return "realloc";
     case THREAD_DONE:
       return "thread_done";
+    default:
+      return "unknown";
   }
-  return "unknown";
 }
 
 static size_t FormatEntry(const Entry& entry, char* buffer, size_t buffer_len) {
diff --git a/memory_replay/TraceBenchmark.cpp b/memory_replay/TraceBenchmark.cpp
index 1612997..dbc68c4 100644
--- a/memory_replay/TraceBenchmark.cpp
+++ b/memory_replay/TraceBenchmark.cpp
@@ -138,6 +138,7 @@
         }
         break;
       case memory_trace::THREAD_DONE:
+      case memory_trace::UNKNOWN:
         break;
     }
   }
@@ -239,6 +240,7 @@
         break;
 
       case memory_trace::THREAD_DONE:
+      case memory_trace::UNKNOWN:
         break;
     }
   }
diff --git a/memory_replay/VerifyTrace.cpp b/memory_replay/VerifyTrace.cpp
index 0094940..e60a213 100644
--- a/memory_replay/VerifyTrace.cpp
+++ b/memory_replay/VerifyTrace.cpp
@@ -129,6 +129,7 @@
         }
         break;
       case memory_trace::THREAD_DONE:
+      case memory_trace::UNKNOWN:
         break;
     }
 
diff --git a/memory_replay/include/memory_trace/MemoryTrace.h b/memory_replay/include/memory_trace/MemoryTrace.h
index 108a921..3b2a390 100644
--- a/memory_replay/include/memory_trace/MemoryTrace.h
+++ b/memory_replay/include/memory_trace/MemoryTrace.h
@@ -29,6 +29,7 @@
   REALLOC,
   FREE,
   THREAD_DONE,
+  UNKNOWN,
 };
 
 struct Entry {
diff --git a/memory_replay/main.cpp b/memory_replay/main.cpp
index 0f50953..ffa9773 100644
--- a/memory_replay/main.cpp
+++ b/memory_replay/main.cpp
@@ -47,6 +47,7 @@
   for (size_t i = 0; i < num_entries; i++) {
     switch (entries[i].type) {
       case memory_trace::THREAD_DONE:
+      case memory_trace::UNKNOWN:
         break;
       case memory_trace::MALLOC:
       case memory_trace::CALLOC:
diff --git a/profcollectd/binder/com/android/server/profcollect/IProfCollectd.aidl b/profcollectd/binder/com/android/server/profcollect/IProfCollectd.aidl
index 1476768..970c0fa 100644
--- a/profcollectd/binder/com/android/server/profcollect/IProfCollectd.aidl
+++ b/profcollectd/binder/com/android/server/profcollect/IProfCollectd.aidl
@@ -20,8 +20,6 @@
 
 /** {@hide} */
 interface IProfCollectd {
-    void schedule();
-    void terminate();
     void trace_system(@utf8InCpp String tag);
     void trace_process(@utf8InCpp String tag, @utf8InCpp String processes, float duration);
     void process();
diff --git a/profcollectd/libprofcollectd/lib.rs b/profcollectd/libprofcollectd/lib.rs
index 4663e68..741bed1 100644
--- a/profcollectd/libprofcollectd/lib.rs
+++ b/profcollectd/libprofcollectd/lib.rs
@@ -49,14 +49,12 @@
         if elapsed < TIMEOUT_TO_COLLECT_BOOT_PROFILE {
             trace_system("boot").map_err(err_to_binder_status)?;
         }
-        schedule().map_err(err_to_binder_status)?;
         Ok(())
     }
 }
 
-/// Initialise profcollectd service.
-/// * `schedule_now` - Immediately schedule collection after service is initialised.
-pub fn init_service(schedule_now: bool) -> Result<()> {
+/// Initialize profcollectd service.
+pub fn init_service() -> Result<()> {
     binder::ProcessState::start_thread_pool();
 
     let profcollect_binder_service = ProfcollectdBinderService::new()?;
@@ -67,13 +65,11 @@
     )
     .context("Failed to register service.")?;
 
-    if schedule_now {
-        let cb = BnProviderStatusCallback::new_binder(
-            ProviderStatusCallback { service_start_time: Instant::now() },
-            BinderFeatures::default(),
-        );
-        get_profcollectd_service()?.registerProviderStatusCallback(&cb)?;
-    }
+    let cb = BnProviderStatusCallback::new_binder(
+        ProviderStatusCallback { service_start_time: Instant::now() },
+        BinderFeatures::default(),
+    );
+    get_profcollectd_service()?.registerProviderStatusCallback(&cb)?;
 
     binder::ProcessState::join_thread_pool();
     Ok(())
@@ -84,18 +80,6 @@
         .context("Failed to get profcollectd binder service, is profcollectd running?")
 }
 
-/// Schedule periodic profile collection.
-pub fn schedule() -> Result<()> {
-    get_profcollectd_service()?.schedule()?;
-    Ok(())
-}
-
-/// Terminate periodic profile collection.
-pub fn terminate() -> Result<()> {
-    get_profcollectd_service()?.terminate()?;
-    Ok(())
-}
-
 /// Immediately schedule a one-off trace.
 pub fn trace_system(tag: &str) -> Result<()> {
     get_profcollectd_service()?.trace_system(tag)?;
diff --git a/profcollectd/libprofcollectd/scheduler.rs b/profcollectd/libprofcollectd/scheduler.rs
index e37ffe7..9229086 100644
--- a/profcollectd/libprofcollectd/scheduler.rs
+++ b/profcollectd/libprofcollectd/scheduler.rs
@@ -19,7 +19,6 @@
 use std::fs;
 use std::mem;
 use std::path::Path;
-use std::sync::mpsc::{sync_channel, SyncSender};
 use std::sync::Arc;
 use std::sync::Mutex;
 use std::thread;
@@ -27,12 +26,9 @@
 
 use crate::config::{get_sampling_period, Config, LOG_FILE, PROFILE_OUTPUT_DIR, TRACE_OUTPUT_DIR};
 use crate::trace_provider::{self, TraceProvider};
-use anyhow::{anyhow, ensure, Context, Result};
+use anyhow::{anyhow, Context, Result};
 
 pub struct Scheduler {
-    /// Signal to terminate the periodic collection worker thread, None if periodic collection is
-    /// not scheduled.
-    termination_ch: Option<SyncSender<()>>,
     /// The preferred trace provider for the system.
     trace_provider: Arc<Mutex<dyn TraceProvider + Send>>,
     provider_ready_callbacks: Arc<Mutex<Vec<Box<dyn FnOnce() + Send>>>>,
@@ -43,57 +39,11 @@
         let p = trace_provider::get_trace_provider()?;
         p.lock().map_err(|e| anyhow!(e.to_string()))?.set_log_file(&LOG_FILE);
         Ok(Scheduler {
-            termination_ch: None,
             trace_provider: p,
             provider_ready_callbacks: Arc::new(Mutex::new(Vec::new())),
         })
     }
 
-    fn is_scheduled(&self) -> bool {
-        self.termination_ch.is_some()
-    }
-
-    pub fn schedule_periodic(&mut self, config: &Config) -> Result<()> {
-        ensure!(!self.is_scheduled(), "Already scheduled.");
-
-        let (sender, receiver) = sync_channel(1);
-        self.termination_ch = Some(sender);
-
-        // Clone config and trace_provider ARC for the worker thread.
-        let config = config.clone();
-        let trace_provider = self.trace_provider.clone();
-
-        thread::spawn(move || {
-            loop {
-                match receiver.recv_timeout(config.collection_interval) {
-                    Ok(_) => break,
-                    Err(_) => {
-                        // Did not receive a termination signal, initiate trace event.
-                        if check_space_limit(&TRACE_OUTPUT_DIR, &config).unwrap() {
-                            trace_provider.lock().unwrap().trace_system(
-                                &TRACE_OUTPUT_DIR,
-                                "periodic",
-                                &get_sampling_period(),
-                                &config.binary_filter,
-                            );
-                        }
-                    }
-                }
-            }
-        });
-        Ok(())
-    }
-
-    pub fn terminate_periodic(&mut self) -> Result<()> {
-        self.termination_ch
-            .as_ref()
-            .ok_or_else(|| anyhow!("Not scheduled"))?
-            .send(())
-            .context("Scheduler worker disappeared.")?;
-        self.termination_ch = None;
-        Ok(())
-    }
-
     pub fn trace_system(&self, config: &Config, tag: &str) -> Result<()> {
         let trace_provider = self.trace_provider.clone();
         if check_space_limit(&TRACE_OUTPUT_DIR, config)? {
diff --git a/profcollectd/libprofcollectd/service.rs b/profcollectd/libprofcollectd/service.rs
index 5e3097a..49c5406 100644
--- a/profcollectd/libprofcollectd/service.rs
+++ b/profcollectd/libprofcollectd/service.rs
@@ -51,20 +51,6 @@
 impl binder::Interface for ProfcollectdBinderService {}
 
 impl IProfCollectd for ProfcollectdBinderService {
-    fn schedule(&self) -> BinderResult<()> {
-        let lock = &mut *self.lock();
-        lock.scheduler
-            .schedule_periodic(&lock.config)
-            .context("Failed to schedule collection.")
-            .map_err(err_to_binder_status)
-    }
-    fn terminate(&self) -> BinderResult<()> {
-        self.lock()
-            .scheduler
-            .terminate_periodic()
-            .context("Failed to terminate collection.")
-            .map_err(err_to_binder_status)
-    }
     fn trace_system(&self, tag: &str) -> BinderResult<()> {
         let lock = &mut *self.lock();
         lock.scheduler
diff --git a/profcollectd/profcollectctl.rs b/profcollectd/profcollectctl.rs
index bc22d3b..c533691 100644
--- a/profcollectd/profcollectctl.rs
+++ b/profcollectd/profcollectctl.rs
@@ -25,8 +25,6 @@
 Command to control profcollectd behaviour.
 
 command:
-    start       Schedule periodic collection.
-    stop        Terminate periodic collection.
     trace       Request an one-off system-wide trace.
     process     Convert traces to perf profiles.
     report      Create a report containing all profiles.
@@ -44,14 +42,6 @@
 
     let action = &args[1];
     match action.as_str() {
-        "start" => {
-            println!("Scheduling profile collection");
-            libprofcollectd::schedule().context("Failed to schedule collection.")?;
-        }
-        "stop" => {
-            println!("Terminating profile collection");
-            libprofcollectd::terminate().context("Failed to terminate collection.")?;
-        }
         "trace" => {
             println!("Performing system-wide trace");
             libprofcollectd::trace_system("manual").context("Failed to trace.")?;
diff --git a/profcollectd/profcollectd.rs b/profcollectd/profcollectd.rs
index 0c2e87d..3ae9121 100644
--- a/profcollectd/profcollectd.rs
+++ b/profcollectd/profcollectd.rs
@@ -22,7 +22,7 @@
 const HELP_MSG: &str = r#"
 profcollectd background daemon.
 usage: profcollectd [command]
-    nostart       Start daemon but do not schedule profile collection.
+    help       Print help message.
 "#;
 
 fn main() -> Result<()> {
@@ -33,12 +33,11 @@
         bail!("This program only takes one or no argument{}", &HELP_MSG);
     }
     if args.len() == 1 {
-        libprofcollectd::init_service(true)?;
+        libprofcollectd::init_service()?;
     }
 
     let action = &args[1];
     match action.as_str() {
-        "nostart" => libprofcollectd::init_service(false)?,
         "help" => println!("{}", &HELP_MSG),
         arg => bail!("Unknown argument: {}\n{}", &arg, &HELP_MSG),
     }
