diff --git a/0017-sampler-interface.md b/0017-sampler-interface.md
new file mode 100644
index 0000000..6316b70
--- /dev/null
+++ b/0017-sampler-interface.md
@@ -0,0 +1,282 @@
+# SamplerV2
+
+| **Status** | **Proposed/Accepted/Deprecated** |
+|:------------------|:---------------------------------------------|
+| **RFC #** | 0017 |
+| **Authors** | Lev Bishop (lsbishop@us.ibm.com) |
+| | Ian Hincks (ian.hincks@ibm.com) |
+| | Blake Johnson (blake.johnson@ibm.com) |
+| | Chris Wood (cjwood@us.ibm.com) |
+| **Submitted** | 2023-10-03 |
+| **Updated** | YYYY-MM-DD |
+
+
+## Summary
+
+This RFC proposes an interface for the next version of the `Sampler`.
+The changes proposed here mirror those accepted in [the paired Estimator interface RFC](https://github.com/Qiskit/RFCs/pull/51), where the arguments of the `Estimator.run()` signature were transposed to accept, instead of three iterable arguments, an iterable of "tasks", with each task comprising a circuit and auxiliary execution information.
+In the case of the `Sampler`, a task consists only of a circuit and an array of parameter value sets if it is a parametric circuit.
+We aim to move the `Sampler` to be a viable replacement for `backend.run`, and eliminate the notion of sample weights (i.e. quasi-probabilities).
+
+## Motivation
+
+We will propose a `Sampler` that
+
+ * _Obeys program outputs._ Every circuit defines a set of classical registers whose output names and types are known before execution. The prototypical type is a bit-array, but the OpenQASM 3 specification allows many other types, too, which Qiskit aims to follow. The current return structure of the sampler does not handle this gracefully, squishing bitstrings from separate registers together. It also does not attempt make a careful distinction between sampling from a program's output registers, and sampling from the output state that it prepares---it did not need to as these two views are equivalent for circuits that measure all qubits at the end of the circuit. However, this proposal takes the former stance, and separates returned data according to its output names. The motivation for this choice is that it would make the `Sampler` fully compliant with dynamic circuits.
+ * _Naturally allows multiple parameter value sets._ A common use case for many users is running the same parametric program with many parameter value sets in the same `run()` invocation. These changes will make it easier for implementations to do this efficiently with late-stage binding. Efficient invocation of the same parametric circuit between multiple `run()` invocations is out of scope of this RFC.
+ * _Is a "`memory=True`" execution model._ We will break from the tradition of using a mapping structure as the default container type for circuit execution. Instead, results will always be returned in a format where one output axis iterates over shots, and maintains execution order. The motivation is that, in a program whose total output size is more than 100 qubits, due to gate and measurement noise, the chances that any two output values are equal to each other is too small to make special accomodation for via a hash map. When the output size is smaller than this loose threshhold, so that output value collisions are likely, the data will take up less space anyways. Container objects will contain methods returning count-like structures to ease migration.
+ * _Has no sample weights._ The current sampler attaches real weights summing to one to all samples. In effect, it returns an estimate of a (quasi)-distribution instead of samples from the distribution. This proposal eliminates this feature and returns only samples, and without weights. The rationale is to make the `Sampler` into more of a streamlined circuit executor, paring down all frills.
+
+
+## User Benefit
+
+Users will be able to transition from `backend.run` to `sampler.run` without any compromises in execution efficiency. They will be able to run dynamic circuits without having to specify special flags, or invoke a special program. They will get their outputs in a format where they don't need to manually separate bitstrings from different registers.
+
+As with the [(paired Estimator inteface RFC)[https://github.com/Qiskit/RFCs/pull/51]](https://github.com/Qiskit/RFCs/pull/51), implementations will more easily be able to enable features like late stage parameter value binding.
+
+## Design Proposal
+
+We will lead the design proposal with an example.
+
+```python
+# Our first circuit has many Parameters, but elects to do all measurement at
+# the end. Note that measure_all() chooses the register name "meas" for you.
+circuit1 = QuantumCircuit(9)
+...
+