diff --git a/inline-r.cabal b/inline-r.cabal
--- a/inline-r.cabal
+++ b/inline-r.cabal
@@ -1,5 +1,5 @@
 name:                inline-r
-version:             0.7.0.0
+version:             0.7.1.0
 license:             BSD3
 copyright:           Copyright (c) 2013-2015 Amgen, Inc.
                      Copyright (c) 2015 Tweag I/O Limited.
diff --git a/src/Data/Vector/SEXP.chs b/src/Data/Vector/SEXP.chs
--- a/src/Data/Vector/SEXP.chs
+++ b/src/Data/Vector/SEXP.chs
@@ -327,15 +327,15 @@
   -- directly.
   basicUnsafeSlice i l v         = unsafeInlineIO $ do
     mv <- Mutable.new l
-    copyArray (toVecPtr v `plusPtr` i)
-              (toMVecPtr mv)
+    copyArray (toMVecPtr mv)
+              (toVecPtr v `plusPtr` i)
               l
     G.basicUnsafeFreeze mv
   basicUnsafeIndexM v i          = return . unsafeInlineIO
                                  $ peekElemOff (toVecPtr v) i
   basicUnsafeCopy   mv v         = unsafePrimToPrim $
-    copyArray (toVecPtr v)
-              (toMVecPtr mv)
+    copyArray (toMVecPtr mv)
+              (toVecPtr v)
               (G.basicLength v)
 
   elemseq _                      = seq
diff --git a/tests/Test/Vector.hs b/tests/Test/Vector.hs
--- a/tests/Test/Vector.hs
+++ b/tests/Test/Vector.hs
@@ -9,12 +9,14 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE GADTs #-}
+{-# LANGUAGE OverloadedLists #-}
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeSynonymInstances #-}
 {-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE ViewPatterns #-}
 
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
@@ -31,6 +33,7 @@
 import qualified Foreign.R as R
 import H.Prelude hiding (Show)
 import Language.R.QQ
+import Language.R.HExp (HExp(..), hexp)
 import Test.Tasty
 import Test.Tasty.QuickCheck
 import Test.Tasty.HUnit
@@ -119,6 +122,13 @@
            return $ immV V.! 0
     i @?= 1
 
+vectorCopy :: TestTree
+vectorCopy = testCase "Copying vector of doubles works" $ runRegion $ do
+  vs1 :: R.SEXP s 'R.Real <- V.toSEXP (V.fromList [1..3::Double])
+  vs2 :: R.SEXP s 'R.Real <- V.unsafeToSEXP (V.fromList [1..3::Double])
+  R.SomeSEXP (hexp -> Logical [R.True]) <- [r| identical(vs1_hs, vs2_hs) |]
+  return ()
+
 tests :: TestTree
 tests = testGroup "Tests."
   [ testGroup "Data.Vector.Storable.Vector (Int32)"
@@ -127,5 +137,6 @@
       [testNumericSEXPVector (undefined :: Data.Vector.SEXP.Vector s 'R.Real Double)]
   , testGroup "Regression tests" [fromListLength
                                  ,vectorIsImmutable
+                                 ,vectorCopy
                                  ]
   ]
