diff --git a/Cargo.lock b/Cargo.lock
index ffb61f4d8beb387ba3c756617f5bb3c8ce18ef3b..f6ffbed9cffeaf1e87cd3f789d9737fb3d2b1bf5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1210,7 +1210,7 @@ dependencies = [
 ]
 
 [[package]]
-name = "juno_product_read"
+name = "juno_products"
 version = "0.1.0"
 dependencies = [
  "async-std",
diff --git a/Cargo.toml b/Cargo.toml
index 3e86bad053f8847c9f10d18117635de1cfa76250..0ed8f64bbfe490464d7a201837f2f9ba133326c3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -33,5 +33,5 @@ members = [
 	"juno_samples/edge_detection",
 	"juno_samples/fork_join_tests",
 	"juno_samples/multi_device",
-	"juno_samples/product_read",
+	"juno_samples/products",
 ]
diff --git a/juno_samples/product_read/Cargo.toml b/juno_samples/products/Cargo.toml
similarity index 88%
rename from juno_samples/product_read/Cargo.toml
rename to juno_samples/products/Cargo.toml
index d466f5550b77e426040842339684a1e8906b22fa..34878a07f2e4fac223075536bf5559b8e1f4b132 100644
--- a/juno_samples/product_read/Cargo.toml
+++ b/juno_samples/products/Cargo.toml
@@ -1,11 +1,11 @@
 [package]
-name = "juno_product_read"
+name = "juno_products"
 version = "0.1.0"
 authors = ["Aaron Councilman <aaronjc4@illinois.edu>"]
 edition = "2021"
 
 [[bin]]
-name = "juno_product_read"
+name = "juno_products"
 path = "src/main.rs"
 
 [features]
diff --git a/juno_samples/product_read/build.rs b/juno_samples/products/build.rs
similarity index 81%
rename from juno_samples/product_read/build.rs
rename to juno_samples/products/build.rs
index 2bd5172e661e65e2284a986e2d710cd890d71b90..6d621961581406b08cb5e85f6ff03e63df29b84a 100644
--- a/juno_samples/product_read/build.rs
+++ b/juno_samples/products/build.rs
@@ -4,7 +4,7 @@ fn main() {
     #[cfg(not(feature = "cuda"))]
     {
         JunoCompiler::new()
-            .file_in_src("product_read.jn")
+            .file_in_src("products.jn")
             .unwrap()
             .build()
             .unwrap();
@@ -12,7 +12,7 @@ fn main() {
     #[cfg(feature = "cuda")]
     {
         JunoCompiler::new()
-            .file_in_src("product_read.jn")
+            .file_in_src("products.jn")
             .unwrap()
             .schedule_in_src("gpu.sch")
             .unwrap()
diff --git a/juno_samples/product_read/src/gpu.sch b/juno_samples/products/src/gpu.sch
similarity index 100%
rename from juno_samples/product_read/src/gpu.sch
rename to juno_samples/products/src/gpu.sch
diff --git a/juno_samples/product_read/src/main.rs b/juno_samples/products/src/main.rs
similarity index 63%
rename from juno_samples/product_read/src/main.rs
rename to juno_samples/products/src/main.rs
index 5211098ceebd6d7b15871ba0dd73cdbefb993313..b8abb59d5bc3b2cbbb0ef13ec1f44c8d0734e1bb 100644
--- a/juno_samples/product_read/src/main.rs
+++ b/juno_samples/products/src/main.rs
@@ -2,7 +2,7 @@
 
 use hercules_rt::{runner, HerculesImmBox, HerculesImmBoxTo, HerculesMutBox};
 
-juno_build::juno!("product_read");
+juno_build::juno!("products");
 
 fn main() {
     async_std::task::block_on(async {
@@ -11,6 +11,11 @@ fn main() {
         let mut r = runner!(product_read);
         let res : Vec<i32> = HerculesMutBox::from(r.run(input.to()).await).as_slice().to_vec();
         assert_eq!(res, vec![0, 1, 2, 3]);
+
+        // Technically this returns a product of two i32s, but we can interpret that as an array
+        let mut r = runner!(product_return);
+        let res : Vec<i32> = HerculesMutBox::from(r.run(42, 17).await).as_slice().to_vec();
+        assert_eq!(res, vec![42, 17]);
     });
 }
 
diff --git a/juno_samples/product_read/src/product_read.jn b/juno_samples/products/src/products.jn
similarity index 72%
rename from juno_samples/product_read/src/product_read.jn
rename to juno_samples/products/src/products.jn
index 7bf74a105b32099341f299c38898f6f6c08eb467..4f56368ec35463e9d7ac545b7ed08ef288b0178b 100644
--- a/juno_samples/product_read/src/product_read.jn
+++ b/juno_samples/products/src/products.jn
@@ -7,3 +7,8 @@ fn product_read(input: (i32, i32)[2]) -> i32[4] {
   result[3] = input[1].1;
   return result;
 }
+
+#[entry]
+fn product_return(x: i32, y: i32) -> (i32, i32) {
+  return (x, y);
+}