diff --git a/src/containers/sprite-library.jsx b/src/containers/sprite-library.jsx
index 72efa4fc94d4fac0efbefa7206c44692f47a1278..dd4c3dddba0d25ba1b67e1652544c8411b7122e5 100644
--- a/src/containers/sprite-library.jsx
+++ b/src/containers/sprite-library.jsx
@@ -6,6 +6,7 @@ import VM from 'scratch-vm';
 
 import analytics from '../lib/analytics';
 import spriteLibraryContent from '../lib/libraries/sprites.json';
+import randomizeSpritePosition from '../lib/randomize-sprite-position';
 import spriteTags from '../lib/libraries/sprite-tags';
 
 import LibraryComponent from '../components/library/library.jsx';
@@ -39,6 +40,8 @@ class SpriteLibrary extends React.PureComponent {
         clearInterval(this.intervalId);
     }
     handleItemSelect (item) {
+        // Randomize position of library sprite
+        randomizeSpritePosition(item);
         this.props.vm.addSprite(JSON.stringify(item.json)).then(() => {
             this.props.onActivateBlocksTab();
         });
diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx
index b48e3d232acd59d6a7428b3df89aa3e4404cd594..eb41009694069c54b7bc26409fd655e11c844c73 100644
--- a/src/containers/target-pane.jsx
+++ b/src/containers/target-pane.jsx
@@ -20,6 +20,7 @@ import sharedMessages from '../lib/shared-messages';
 import {emptySprite} from '../lib/empty-assets';
 import {highlightTarget} from '../reducers/targets';
 import {fetchSprite, fetchCode} from '../lib/backpack-api';
+import randomizeSpritePosition from '../lib/randomize-sprite-position';
 
 class TargetPane extends React.Component {
     constructor (props) {
@@ -117,6 +118,7 @@ class TargetPane extends React.Component {
     }
     handleSurpriseSpriteClick () {
         const item = spriteLibraryContent[Math.floor(Math.random() * spriteLibraryContent.length)];
+        randomizeSpritePosition(item);
         this.props.vm.addSprite(JSON.stringify(item.json))
             .then(this.handleActivateBlocksTab);
     }
diff --git a/src/lib/file-uploader.js b/src/lib/file-uploader.js
index f399bc2140fb32a6d02ee56ee341c92260abec8a..12b503a20766666e7be909449c97965ea3bde8ca 100644
--- a/src/lib/file-uploader.js
+++ b/src/lib/file-uploader.js
@@ -1,5 +1,6 @@
 import {BitmapAdapter} from 'scratch-svg-renderer';
 import log from './log.js';
+import randomizeSpritePosition from './randomize-sprite-position.js';
 
 /**
  * Extract the file name given a string of the form fileName + ext
@@ -199,7 +200,7 @@ const spriteUpload = function (fileData, fileType, spriteName, storage, handleSp
             const newSprite = {
                 name: spriteName,
                 isStage: false,
-                x: 0,
+                x: 0, // x/y will be randomized below
                 y: 0,
                 visible: true,
                 size: 100,
@@ -212,6 +213,7 @@ const spriteUpload = function (fileData, fileType, spriteName, storage, handleSp
                 costumes: [vmCostume],
                 sounds: [] // TODO are all of these necessary?
             };
+            randomizeSpritePosition(newSprite);
             // TODO probably just want sprite upload to handle this object directly
             handleSprite(JSON.stringify(newSprite));
         }));
diff --git a/src/lib/randomize-sprite-position.js b/src/lib/randomize-sprite-position.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd4c55eb964adedc16a6c7e8e300e968a07c3de3
--- /dev/null
+++ b/src/lib/randomize-sprite-position.js
@@ -0,0 +1,16 @@
+const randomizeSpritePosition = spriteObject => {
+    // https://github.com/LLK/scratch-flash/blob/689f3c79a7e8b2e98f5be80056d877f303a8d8ba/src/Scratch.as#L1385
+    const randomX = Math.floor((200 * Math.random()) - 100);
+    const randomY = Math.floor((100 * Math.random()) - 50);
+    if (spriteObject.hasOwnProperty('json')) {
+        // Library sprite object
+        spriteObject.json.scratchX = randomX;
+        spriteObject.json.scratchY = randomY;
+    } else if (spriteObject.hasOwnProperty('x') && spriteObject.hasOwnProperty('y')) {
+        // Scratch 3 sprite object
+        spriteObject.x = randomX;
+        spriteObject.y = randomY;
+    }
+};
+
+export default randomizeSpritePosition;