diff --git a/pyopencl/array.py b/pyopencl/array.py
index 15979e153e1198bc64222e59e7fc348f751d89be..7f6f1cb599bacf966adb46c0c06ca2b5cfc90967 100644
--- a/pyopencl/array.py
+++ b/pyopencl/array.py
@@ -983,22 +983,26 @@ class Array:
                 dest.context, dest.dtype, src.dtype)
 
     def _new_like_me(self, dtype=None, queue=None):
-        strides = None
-        flags = None
         if dtype is None:
             dtype = self.dtype
-
-        if dtype == self.dtype:
             strides = self.strides
             flags = self.flags
+            fast = True
+        else:
+            strides = None
+            flags = None
+            if dtype == self.dtype:
+                strides = self.strides
+                flags = self.flags
+                fast = True
+            else:
+                fast = False
 
         queue = queue or self.queue
-        if queue is not None:
-            return self.__class__(queue, self.shape, dtype,
-                    allocator=self.allocator, strides=strides, _flags=flags)
-        else:
-            return self.__class__(self.context, self.shape, dtype,
-                    strides=strides, allocator=self.allocator, _flags=flags)
+        return self.__class__(None, self.shape, dtype,
+                allocator=self.allocator, strides=strides, _flags=flags,
+                _fast=fast,
+                _size=self.size, _queue=queue, _context=self.context)
 
     @staticmethod
     @elwise_kernel_runner