diff --git a/python/cc/BUILD.bazel b/python/cc/BUILD.bazel
index 14bb783..183e934 100644
--- a/python/cc/BUILD.bazel
+++ b/python/cc/BUILD.bazel
@@ -16,8 +16,8 @@
 )
 
 cc_library(
-    name = "simple_output_stream",
-    hdrs = ["simple_output_stream.h"],
+    name = "python_file_object_adapter",
+    hdrs = ["python_file_object_adapter.h"],
     include_prefix = "tink/python",
     strip_include_prefix = "/python",
     deps = [
@@ -28,13 +28,13 @@
 )
 
 cc_library(
-    name = "simple_output_stream_adapter",
-    srcs = ["simple_output_stream_adapter.cc"],
-    hdrs = ["simple_output_stream_adapter.h"],
+    name = "python_output_stream",
+    srcs = ["python_output_stream.cc"],
+    hdrs = ["python_output_stream.h"],
     include_prefix = "tink/python",
     strip_include_prefix = "/python",
     deps = [
-        ":simple_output_stream",
+        ":python_file_object_adapter",
         "//cc:output_stream",
         "//cc/subtle:subtle_util",
         "//cc/util:errors",
@@ -47,13 +47,13 @@
 )
 
 cc_test(
-    name = "simple_output_stream_adapter_test",
+    name = "python_output_stream_test",
     size = "medium",
-    srcs = ["simple_output_stream_adapter_test.cc"],
+    srcs = ["python_output_stream_test.cc"],
     linkopts = ["-lpthread"],
     deps = [
-        ":simple_output_stream",
-        ":simple_output_stream_adapter",
+        ":python_file_object_adapter",
+        ":python_output_stream",
         "//cc/subtle:random",
         "//cc/util:status",
         "//cc/util:statusor",
diff --git a/python/cc/clif/simple_output_stream.clif b/python/cc/clif/python_file_object_adapter.clif
similarity index 84%
rename from python/cc/clif/simple_output_stream.clif
rename to python/cc/clif/python_file_object_adapter.clif
index 287e14d..2ded31c 100644
--- a/python/cc/clif/simple_output_stream.clif
+++ b/python/cc/clif/python_file_object_adapter.clif
@@ -12,14 +12,11 @@
 
 from "tink/python/util/clif.h" import *  # Status, StatusOr
 
-from "tink/python/cc/simple_output_stream.h":
+from "tink/python/cc/python_file_object_adapter.h":
   namespace `crypto::tink`:
-    class SimpleOutputStream:
+    class PythonFileObjectAdapter:
       @virtual
       def `Write` as write(self, data: bytes) -> StatusOr<int>
 
       @virtual
       def `Close` as close(self) -> Status
-
-      @virtual
-      def `Position` as position(self) -> int
diff --git a/python/cc/simple_output_stream.h b/python/cc/python_file_object_adapter.h
similarity index 72%
rename from python/cc/simple_output_stream.h
rename to python/cc/python_file_object_adapter.h
index 80db68d..342e05e 100644
--- a/python/cc/simple_output_stream.h
+++ b/python/cc/python_file_object_adapter.h
@@ -12,8 +12,8 @@
 //
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifndef TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
-#define TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
+#ifndef TINK_PYTHON_CC_PYTHON_FILE_OBJECT_ADAPTER_H_
+#define TINK_PYTHON_CC_PYTHON_FILE_OBJECT_ADAPTER_H_
 
 #include "absl/strings/string_view.h"
 #include "tink/util/status.h"
@@ -22,9 +22,9 @@
 namespace crypto {
 namespace tink {
 
-// A simple interface for an output stream like object which can be used to go
-// from Python to C++ via CLIF and vice versa.
-class SimpleOutputStream {
+// Adapts a Python file object for use in C++.
+// This is CLIFed and implemented in Python.
+class PythonFileObjectAdapter {
  public:
   // Writes 'data' to the underlying stream and returns the number of bytes
   // written, which can be less than the size of 'data'.
@@ -33,13 +33,10 @@
   // Closes the underlying stream.
   virtual util::Status Close() = 0;
 
-  // Returns the total number of bytes written.
-  virtual int64_t Position() const = 0;
-
-  virtual ~SimpleOutputStream() {}
+  virtual ~PythonFileObjectAdapter() {}
 };
 
 }  // namespace tink
 }  // namespace crypto
 
-#endif  // TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
+#endif  // TINK_PYTHON_CC_PYTHON_FILE_OBJECT_ADAPTER_H_
diff --git a/python/cc/simple_output_stream_adapter.cc b/python/cc/python_output_stream.cc
similarity index 81%
rename from python/cc/simple_output_stream_adapter.cc
rename to python/cc/python_output_stream.cc
index 4c21fc3..23449df 100644
--- a/python/cc/simple_output_stream_adapter.cc
+++ b/python/cc/python_output_stream.cc
@@ -12,7 +12,7 @@
 //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "tink/python/cc/simple_output_stream_adapter.h"
+#include "tink/python/cc/python_output_stream.h"
 
 #include <algorithm>
 #include <memory>
@@ -24,15 +24,15 @@
 #include "tink/util/errors.h"
 #include "tink/util/status.h"
 #include "tink/util/statusor.h"
-#include "tink/python/cc/simple_output_stream.h"
+#include "tink/python/cc/python_file_object_adapter.h"
 
 namespace crypto {
 namespace tink {
 
-SimpleOutputStreamAdapter::SimpleOutputStreamAdapter(
-    std::unique_ptr<SimpleOutputStream> stream, int buffer_size) {
+PythonOutputStream::PythonOutputStream(
+    std::unique_ptr<PythonFileObjectAdapter> adapter, int buffer_size) {
   if (buffer_size <= 0) buffer_size = 128 * 1024;  // 128 KB
-  stream_ = std::move(stream);
+  adapter_ = std::move(adapter);
   subtle::ResizeStringUninitialized(&buffer_, buffer_size);
   is_first_call_ = true;
   position_ = 0;
@@ -41,7 +41,7 @@
   status_ = util::OkStatus();
 }
 
-crypto::tink::util::StatusOr<int> SimpleOutputStreamAdapter::Next(void** data) {
+crypto::tink::util::StatusOr<int> PythonOutputStream::Next(void** data) {
   if (!status_.ok()) return status_;
 
   // This is the first call to Next(), so we return the whole buffer.
@@ -67,7 +67,7 @@
   // The available space might not span the entire buffer, as writing
   // may succeed only for a prefix of the buffer -- in this case the data still
   // to be written is shifted in the buffer and the remaining space is returned.
-  auto write_result = stream_->Write(buffer_);
+  auto write_result = adapter_->Write(buffer_);
   if (!write_result.ok()) return status_ = write_result.status();
 
   // Some data was written, so we can return some portion of buffer_.
@@ -84,36 +84,34 @@
   return written;
 }
 
-void SimpleOutputStreamAdapter::BackUp(int count) {
+void PythonOutputStream::BackUp(int count) {
   if (!status_.ok() || count < 1 || count_in_buffer_ == 0) return;
   int actual_count = std::min(count, count_in_buffer_ - buffer_offset_);
   count_in_buffer_ -= actual_count;
   position_ -= actual_count;
 }
 
-SimpleOutputStreamAdapter::~SimpleOutputStreamAdapter() {
-  Close().IgnoreError();
-}
+PythonOutputStream::~PythonOutputStream() { Close().IgnoreError(); }
 
-util::Status SimpleOutputStreamAdapter::Close() {
+util::Status PythonOutputStream::Close() {
   if (!status_.ok()) return status_;
   if (count_in_buffer_ > 0) {
     // Try to write the remaining bytes.
     int written = 0;
     while (written < count_in_buffer_) {
-      auto write_result = stream_->Write(absl::string_view(buffer_).substr(
+      auto write_result = adapter_->Write(absl::string_view(buffer_).substr(
           written, count_in_buffer_ - written));
       if (!write_result.ok()) return write_result.status();
       written += write_result.ValueOrDie();
     }
   }
-  status_ = stream_->Close();
+  status_ = adapter_->Close();
   if (!status_.ok()) return status_;
   status_ = util::Status(util::error::FAILED_PRECONDITION, "Stream closed");
   return util::OkStatus();
 }
 
-int64_t SimpleOutputStreamAdapter::Position() const { return position_; }
+int64_t PythonOutputStream::Position() const { return position_; }
 
 }  // namespace tink
 }  // namespace crypto
diff --git a/python/cc/simple_output_stream_adapter.h b/python/cc/python_output_stream.h
similarity index 67%
rename from python/cc/simple_output_stream_adapter.h
rename to python/cc/python_output_stream.h
index 1d73f22..f289ddb 100644
--- a/python/cc/simple_output_stream_adapter.h
+++ b/python/cc/python_output_stream.h
@@ -12,29 +12,29 @@
 //
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifndef TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_ADAPTER_H_
-#define TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_ADAPTER_H_
+#ifndef TINK_PYTHON_CC_PYTHON_OUTPUT_STREAM_H_
+#define TINK_PYTHON_CC_PYTHON_OUTPUT_STREAM_H_
 
 #include <memory>
 
 #include "tink/output_stream.h"
 #include "tink/util/status.h"
 #include "tink/util/statusor.h"
-#include "tink/python/cc/simple_output_stream.h"
+#include "tink/python/cc/python_file_object_adapter.h"
 
 namespace crypto {
 namespace tink {
 
-// An OutputStream that writes to a SimpleOutputStream.
-class SimpleOutputStreamAdapter : public crypto::tink::OutputStream {
+// An OutputStream that writes to a PythonFileObjectAdapter.
+class PythonOutputStream : public OutputStream {
  public:
-  // Constructs an OutputStream that will write to the SimpleOutputStream
-  // specified via 'stream', using a buffer of the specified size, if any
+  // Constructs an OutputStream that will write to the PythonFileObjectAdapter
+  // specified via 'adapter', using a buffer of the specified size, if any
   // (if 'buffer_size' <= 0, a reasonable default will be used).
-  explicit SimpleOutputStreamAdapter(std::unique_ptr<SimpleOutputStream> stream,
-                                     int buffer_size = 0);
+  explicit PythonOutputStream(std::unique_ptr<PythonFileObjectAdapter> adapter,
+                              int buffer_size = 0);
 
-  ~SimpleOutputStreamAdapter() override;
+  ~PythonOutputStream() override;
 
   crypto::tink::util::StatusOr<int> Next(void** data) override;
 
@@ -46,7 +46,7 @@
 
  private:
   util::Status status_;
-  std::unique_ptr<SimpleOutputStream> stream_;
+  std::unique_ptr<PythonFileObjectAdapter> adapter_;
   std::string buffer_;
   bool is_first_call_;
   int64_t position_;  // current position in the underlying stream (from the
@@ -60,4 +60,4 @@
 }  // namespace tink
 }  // namespace crypto
 
-#endif  // TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_ADAPTER_H_
+#endif  // TINK_PYTHON_CC_PYTHON_OUTPUT_STREAM_H_
diff --git a/python/cc/simple_output_stream_adapter_test.cc b/python/cc/python_output_stream_test.cc
similarity index 87%
rename from python/cc/simple_output_stream_adapter_test.cc
rename to python/cc/python_output_stream_test.cc
index b2e5efc..6ac4a3e 100644
--- a/python/cc/simple_output_stream_adapter_test.cc
+++ b/python/cc/python_output_stream_test.cc
@@ -12,7 +12,7 @@
 //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "tink/python/cc/simple_output_stream_adapter.h"
+#include "tink/python/cc/python_output_stream.h"
 
 #include <memory>
 
@@ -23,14 +23,14 @@
 #include "tink/subtle/random.h"
 #include "tink/util/status.h"
 #include "tink/util/statusor.h"
-#include "tink/python/cc/simple_output_stream.h"
+#include "tink/python/cc/python_file_object_adapter.h"
 
 namespace crypto {
 namespace tink {
 namespace {
 
-// SimpleOutputStream for testing.
-class TestSimpleOutputStream : public SimpleOutputStream {
+// PythonFileObjectAdapter for testing.
+class TestPythonFileObjectAdapter : public PythonFileObjectAdapter {
  public:
   util::StatusOr<int> Write(absl::string_view data) override {
     buffer_ += std::string(data);
@@ -39,8 +39,6 @@
 
   util::Status Close() override { return util::OkStatus(); }
 
-  int64_t Position() const override { return buffer_.size(); }
-
   std::string* GetBuffer() { return &buffer_; }
 
  private:
@@ -50,7 +48,7 @@
 // Writes 'contents' to the specified 'output_stream', and closes the stream.
 // Returns the status of output_stream->Close()-operation, or a non-OK status
 // of a prior output_stream->Next()-operation, if any.
-util::Status WriteToStream(SimpleOutputStreamAdapter* output_stream,
+util::Status WriteToStream(PythonOutputStream* output_stream,
                            absl::string_view contents) {
   void* buffer;
   int pos = 0;
@@ -72,14 +70,14 @@
   return output_stream->Close();
 }
 
-TEST(SimpleOutputStreamAdapterTest, WritingStreams) {
+TEST(PythonOutputStreamTest, WritingStreams) {
   for (size_t stream_size : {0, 10, 100, 1000, 10000, 100000, 1000000}) {
     SCOPED_TRACE(absl::StrCat("stream_size = ", stream_size));
     std::string stream_contents = subtle::Random::GetRandomBytes(stream_size);
-    auto output = absl::make_unique<TestSimpleOutputStream>();
+    auto output = absl::make_unique<TestPythonFileObjectAdapter>();
     std::string* output_buffer = output->GetBuffer();
     auto output_stream =
-        absl::make_unique<SimpleOutputStreamAdapter>(std::move(output));
+        absl::make_unique<PythonOutputStream>(std::move(output));
     auto status = WriteToStream(output_stream.get(), stream_contents);
     EXPECT_TRUE(status.ok()) << status;
     EXPECT_EQ(stream_size, output_buffer->size());
@@ -87,15 +85,15 @@
   }
 }
 
-TEST(SimpleOutputStreamAdapterTest, CustomBufferSizes) {
+TEST(PythonOutputStreamTest, CustomBufferSizes) {
   int stream_size = 1024 * 1024;
   std::string stream_contents = subtle::Random::GetRandomBytes(stream_size);
   for (int buffer_size : {1, 10, 100, 1000, 10000, 100000, 1000000}) {
     SCOPED_TRACE(absl::StrCat("buffer_size = ", buffer_size));
-    auto output = absl::make_unique<TestSimpleOutputStream>();
+    auto output = absl::make_unique<TestPythonFileObjectAdapter>();
     std::string* output_buffer = output->GetBuffer();
-    auto output_stream = absl::make_unique<SimpleOutputStreamAdapter>(
-        std::move(output), buffer_size);
+    auto output_stream =
+        absl::make_unique<PythonOutputStream>(std::move(output), buffer_size);
     void* buffer;
     auto next_result = output_stream->Next(&buffer);
     EXPECT_TRUE(next_result.ok()) << next_result.status();
@@ -108,17 +106,17 @@
   }
 }
 
-TEST(SimpleOutputStreamAdapterTest, BackupAndPosition) {
+TEST(PythonOutputStreamTest, BackupAndPosition) {
   int stream_size = 1024 * 1024;
   int buffer_size = 1234;
   void* buffer;
   std::string stream_contents = subtle::Random::GetRandomBytes(stream_size);
-  auto output = absl::make_unique<TestSimpleOutputStream>();
+  auto output = absl::make_unique<TestPythonFileObjectAdapter>();
   std::string* output_buffer = output->GetBuffer();
 
   // Prepare the stream and do the first call to Next().
-  auto output_stream = absl::make_unique<SimpleOutputStreamAdapter>(
-      std::move(output), buffer_size);
+  auto output_stream =
+      absl::make_unique<PythonOutputStream>(std::move(output), buffer_size);
   EXPECT_EQ(0, output_stream->Position());
   auto next_result = output_stream->Next(&buffer);
   EXPECT_TRUE(next_result.ok()) << next_result.status();
diff --git a/python/util/file_object_adapter.py b/python/util/file_object_adapter.py
index 88b8c18..47461e5 100644
--- a/python/util/file_object_adapter.py
+++ b/python/util/file_object_adapter.py
@@ -11,8 +11,8 @@
 # limitations under the License.
 """FileObjectAdapter class.
 
-Used in conjunction with SimpleOutputStreamAdapter to allow a C++ OutputStream
-to write to a Python file-like objects.
+Used in conjunction with PythonOutputStream to allow a C++ OutputStream
+to write to a Python file-like object.
 """
 
 from __future__ import absolute_import
@@ -23,11 +23,11 @@
 import io
 from typing import BinaryIO
 
-from tink.python.cc.clif import simple_output_stream
+from tink.python.cc.clif import python_file_object_adapter
 
 
-class FileObjectAdapter(simple_output_stream.SimpleOutputStream):
-  """Wraps a Python file object to SimpleOutputStream for use in C++."""
+class FileObjectAdapter(python_file_object_adapter.PythonFileObjectAdapter):
+  """Adapts a Python file object for use in C++."""
 
   def __init__(self, file_object: BinaryIO):
     if not file_object.writable():
@@ -44,6 +44,3 @@
 
   def close(self) -> None:
     self._file_object.close()
-
-  def position(self) -> int:
-    return self._file_object.tell()
diff --git a/python/util/file_object_adapter_test.py b/python/util/file_object_adapter_test.py
index e49a053..15ff5c3 100644
--- a/python/util/file_object_adapter_test.py
+++ b/python/util/file_object_adapter_test.py
@@ -28,7 +28,6 @@
     file_object = io.BytesIO()
     adapter = file_object_adapter.FileObjectAdapter(file_object)
     self.assertEqual(9, adapter.write(b'something'))
-    self.assertEqual(9, adapter.position())
     self.assertEqual(b'something', file_object.getvalue())
     adapter.close()
 
@@ -47,16 +46,6 @@
     adapter.close()
     self.assertRaises(ValueError, adapter.write, b'something')
 
-  def test_position(self):
-    file_object = io.BytesIO()
-    adapter = file_object_adapter.FileObjectAdapter(file_object)
-    self.assertEqual(0, adapter.position())
-    self.assertEqual(9, adapter.write(b'something'))
-    self.assertEqual(9, adapter.position())
-    self.assertEqual(3, adapter.write(b'123'))
-    self.assertEqual(12, adapter.position())
-    adapter.close()
-
   def test_non_writable(self):
     file_object = mock.Mock()
     file_object.writable = mock.Mock(return_value=False)
