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/android/jni/peerconnection_jni.cc b/webrtc/api/android/jni/peerconnection_jni.cc
index 9efe037..5095b15 100644
--- a/webrtc/api/android/jni/peerconnection_jni.cc
+++ b/webrtc/api/android/jni/peerconnection_jni.cc
@@ -770,7 +770,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 a139349..3dcbb4e 100644
--- a/webrtc/media/base/videoframe.h
+++ b/webrtc/media/base/videoframe.h
@@ -58,16 +58,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.
-
-  // TODO(nisse): Deprecated, to be deleted in the cricket::VideoFrame and
-  // webrtc::VideoFrame merge. To make a copy, use the cricket::WebRtcVideoFrame
-  // constructor passing video_frame_buffer(), rotation() and timestamp_us() as
-  // arguments.
-  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.
 
diff --git a/webrtc/media/base/videoframe_unittest.h b/webrtc/media/base/videoframe_unittest.h
index f19d032..13fb790 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 71219d1..3102b05 100644
--- a/webrtc/media/engine/webrtcvideoframe.cc
+++ b/webrtc/media/engine/webrtcvideoframe.cc
@@ -103,11 +103,6 @@
   return rotation_;
 }
 
-VideoFrame* WebRtcVideoFrame::Copy() const {
-  return new WebRtcVideoFrame(video_frame_buffer_, rotation_, timestamp_us_,
-                              transport_frame_id_);
-}
-
 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 bdf5a02..cfbef51 100644
--- a/webrtc/media/engine/webrtcvideoframe.h
+++ b/webrtc/media/engine/webrtcvideoframe.h
@@ -93,8 +93,6 @@
 
   webrtc::VideoRotation rotation() const override;
 
-  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 fb7be22..9d6bd5f 100644
--- a/webrtc/media/engine/webrtcvideoframe_unittest.cc
+++ b/webrtc/media/engine/webrtcvideoframe_unittest.cc
@@ -223,9 +223,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) {
@@ -270,24 +267,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.
-  WebRtcVideoFrame frame1(buffer, 20000, webrtc::kVideoRotation_0);
-  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) {
   WebRtcVideoFrame applied0;
   EXPECT_TRUE(IsNull(applied0));
