diff --git a/talk/app/webrtc/objc/RTCI420Frame.mm b/talk/app/webrtc/objc/RTCI420Frame.mm
index 6c6c564..1646510 100644
--- a/talk/app/webrtc/objc/RTCI420Frame.mm
+++ b/talk/app/webrtc/objc/RTCI420Frame.mm
@@ -29,7 +29,7 @@
 
 #include <memory>
 
-#include "webrtc/media/base/videoframe.h"
+#include "webrtc/media/engine/webrtcvideoframe.h"
 
 @implementation RTCI420Frame {
   std::unique_ptr<cricket::VideoFrame> _videoFrame;
@@ -98,7 +98,10 @@
   if (self = [super init]) {
     // Keep a shallow copy of the video frame. The underlying frame buffer is
     // not copied.
-    _videoFrame.reset(videoFrame->Copy());
+    _videoFrame.reset(new cricket::WebRtcVideoFrame(
+        videoFrame->video_frame_buffer(),
+        videoFrame->rotation(),
+        videoFrame->timestamp_us()));
   }
   return self;
 }
diff --git a/webrtc/api/java/jni/peerconnection_jni.cc b/webrtc/api/java/jni/peerconnection_jni.cc
index a5ba254..2b08f75 100644
--- a/webrtc/api/java/jni/peerconnection_jni.cc
+++ b/webrtc/api/java/jni/peerconnection_jni.cc
@@ -768,7 +768,8 @@
   // ownership of the frame, and the frame should be released with
   // VideoRenderer.releaseNativeFrame().
   static jlong javaShallowCopy(const cricket::VideoFrame* frame) {
-    return jlongFromPointer(frame->Copy());
+    return jlongFromPointer(new cricket::WebRtcVideoFrame(
+        frame->video_frame_buffer(), frame->rotation(), frame->timestamp_us()));
   }
 
   // Return a VideoRenderer.I420Frame referring to the data in |frame|.
diff --git a/webrtc/media/base/videoframe.h b/webrtc/media/base/videoframe.h
index 4015f90..10dc1bd 100644
--- a/webrtc/media/base/videoframe.h
+++ b/webrtc/media/base/videoframe.h
@@ -51,11 +51,6 @@
   // Indicates the rotation angle in degrees.
   virtual webrtc::VideoRotation rotation() const = 0;
 
-  // Make a shallow copy of the frame. The frame buffer itself is not copied.
-  // Both the current and new VideoFrame will share a single reference-counted
-  // frame buffer.
-  virtual VideoFrame *Copy() const = 0;
-
   // Return a copy of frame which has its pending rotation applied. The
   // ownership of the returned frame is held by this frame.
   virtual const VideoFrame* GetCopyWithRotationApplied() const = 0;
diff --git a/webrtc/media/base/videoframe_unittest.h b/webrtc/media/base/videoframe_unittest.h
index 3998561..38c3f85 100644
--- a/webrtc/media/base/videoframe_unittest.h
+++ b/webrtc/media/base/videoframe_unittest.h
@@ -1808,31 +1808,6 @@
     EXPECT_TRUE(IsEqual(frame1, frame2, 1));
   }
 
-  ///////////////////
-  // General tests //
-  ///////////////////
-
-  void Copy() {
-    std::unique_ptr<T> source(new T);
-    std::unique_ptr<cricket::VideoFrame> target;
-    ASSERT_TRUE(LoadFrameNoRepeat(source.get()));
-    target.reset(source->Copy());
-    EXPECT_TRUE(IsEqual(*source, *target, 0));
-    source.reset();
-    ASSERT_TRUE(target->video_frame_buffer() != NULL);
-    EXPECT_TRUE(target->video_frame_buffer()->DataY() != NULL);
-  }
-
-  void CopyIsRef() {
-    std::unique_ptr<T> source(new T);
-    std::unique_ptr<const cricket::VideoFrame> target;
-    ASSERT_TRUE(LoadFrameNoRepeat(source.get()));
-    target.reset(source->Copy());
-    EXPECT_TRUE(IsEqual(*source, *target, 0));
-    const T* const_source = source.get();
-    EXPECT_EQ(const_source->video_frame_buffer(), target->video_frame_buffer());
-  }
-
   int repeat_;
 };
 
diff --git a/webrtc/media/engine/webrtcvideoframe.cc b/webrtc/media/engine/webrtcvideoframe.cc
index 4f89c8b..067c80f 100644
--- a/webrtc/media/engine/webrtcvideoframe.cc
+++ b/webrtc/media/engine/webrtcvideoframe.cc
@@ -78,10 +78,6 @@
   return video_frame_buffer_;
 }
 
-VideoFrame* WebRtcVideoFrame::Copy() const {
-  return new WebRtcVideoFrame(video_frame_buffer_, rotation_, timestamp_us_);
-}
-
 size_t WebRtcVideoFrame::ConvertToRgbBuffer(uint32_t to_fourcc,
                                             uint8_t* buffer,
                                             size_t size,
diff --git a/webrtc/media/engine/webrtcvideoframe.h b/webrtc/media/engine/webrtcvideoframe.h
index 487e32e..cec2f83 100644
--- a/webrtc/media/engine/webrtcvideoframe.h
+++ b/webrtc/media/engine/webrtcvideoframe.h
@@ -75,8 +75,6 @@
 
   webrtc::VideoRotation rotation() const override { return rotation_; }
 
-  VideoFrame* Copy() const override;
-
   size_t ConvertToRgbBuffer(uint32_t to_fourcc,
                             uint8_t* buffer,
                             size_t size,
diff --git a/webrtc/media/engine/webrtcvideoframe_unittest.cc b/webrtc/media/engine/webrtcvideoframe_unittest.cc
index abfd0ae..a725246 100644
--- a/webrtc/media/engine/webrtcvideoframe_unittest.cc
+++ b/webrtc/media/engine/webrtcvideoframe_unittest.cc
@@ -245,9 +245,6 @@
 // TEST_WEBRTCVIDEOFRAME(ConvertToI422Buffer)
 // TEST_WEBRTCVIDEOFRAME(ConstructARGBBlackWhitePixel)
 
-TEST_WEBRTCVIDEOFRAME(Copy)
-TEST_WEBRTCVIDEOFRAME(CopyIsRef)
-
 // These functions test implementation-specific details.
 // Tests the Init function with different cropped size.
 TEST_F(WebRtcVideoFrameTest, InitEvenSize) {
@@ -292,24 +289,6 @@
   EXPECT_EQ(40, frame.timestamp_us());
 }
 
-TEST_F(WebRtcVideoFrameTest, CopyTextureFrame) {
-  webrtc::test::FakeNativeHandle* dummy_handle =
-      new webrtc::test::FakeNativeHandle();
-  webrtc::NativeHandleBuffer* buffer =
-      new rtc::RefCountedObject<webrtc::test::FakeNativeHandleBuffer>(
-          dummy_handle, 640, 480);
-  // Timestamp is converted from ns to us, so last three digits are lost.
-  cricket::WebRtcVideoFrame frame1(buffer, 20000, webrtc::kVideoRotation_0);
-  cricket::VideoFrame* frame2 = frame1.Copy();
-  EXPECT_EQ(frame1.video_frame_buffer()->native_handle(),
-            frame2->video_frame_buffer()->native_handle());
-  EXPECT_EQ(frame1.width(), frame2->width());
-  EXPECT_EQ(frame1.height(), frame2->height());
-  EXPECT_EQ(frame1.GetTimeStamp(), frame2->GetTimeStamp());
-  EXPECT_EQ(frame1.timestamp_us(), frame2->timestamp_us());
-  delete frame2;
-}
-
 TEST_F(WebRtcVideoFrameTest, ApplyRotationToFrame) {
   WebRtcVideoTestFrame applied0;
   EXPECT_TRUE(IsNull(applied0));
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm b/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm
index 5b2d258..dcce32d 100644
--- a/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm
+++ b/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm
@@ -12,6 +12,8 @@
 
 #include <memory>
 
+#include "webrtc/media/engine/webrtcvideoframe.h"
+
 @implementation RTCVideoFrame {
   std::unique_ptr<cricket::VideoFrame> _videoFrame;
   rtc::scoped_refptr<webrtc::VideoFrameBuffer> _i420Buffer;
@@ -105,7 +107,10 @@
   if (self = [super init]) {
     // Keep a shallow copy of the video frame. The underlying frame buffer is
     // not copied.
-    _videoFrame.reset(nativeFrame->Copy());
+    _videoFrame.reset(new cricket::WebRtcVideoFrame(
+        nativeFrame->video_frame_buffer(),
+        nativeFrame->rotation(),
+        nativeFrame->timestamp_us()));
   }
   return self;
 }
