diff --git a/lambdacube-gl.cabal b/lambdacube-gl.cabal
--- a/lambdacube-gl.cabal
+++ b/lambdacube-gl.cabal
@@ -1,5 +1,5 @@
 name:                lambdacube-gl
-version:             0.5.1.2
+version:             0.5.2.0
 synopsis:            OpenGL 3.3 Core Profile backend for LambdaCube 3D
 description:         OpenGL 3.3 Core Profile backend for LambdaCube 3D
 homepage:            http://lambdacube3d.com
diff --git a/src/LambdaCube/GL.hs b/src/LambdaCube/GL.hs
--- a/src/LambdaCube/GL.hs
+++ b/src/LambdaCube/GL.hs
@@ -50,6 +50,7 @@
     setObjectOrder,
     objectUniformSetter,
     setScreenSize,
+    sortSlotObjects,
 
     uniformBool,
     uniformV2B,
diff --git a/src/LambdaCube/GL/Backend.hs b/src/LambdaCube/GL/Backend.hs
--- a/src/LambdaCube/GL/Backend.hs
+++ b/src/LambdaCube/GL/Backend.hs
@@ -750,14 +750,16 @@
                                                 case input of
                                                     Nothing -> putStrLn "Warning: No pipeline input!" >> return ()
                                                     Just ic -> do
-                                                        GLSlot _ objs _ <- readIORef (slotVector (icInput ic) ! (icSlotMapPipelineToInput ic ! slotIdx))
-                                                        --putStrLn $ "Rendering " ++ show (V.length objs) ++ " objects"
-                                                        V.forM_ objs $ \(_,obj) -> do
-                                                            enabled <- readIORef $ objEnabled obj
-                                                            when enabled $ do
+                                                        let draw obj = do
+                                                              enabled <- readIORef $ objEnabled obj
+                                                              when enabled $ do
                                                                 cmd <- readIORef $ objCommands obj
                                                                 --putStrLn "Render object"
                                                                 renderSlot ((cmd ! icId ic) ! progIdx)
+                                                        --putStrLn $ "Rendering " ++ show (V.length objs) ++ " objects"
+                                                        readIORef (slotVector (icInput ic) ! (icSlotMapPipelineToInput ic ! slotIdx)) >>= \case
+                                                          GLSlot _ objs Ordered -> forM_ objs $ draw . snd
+                                                          GLSlot objMap _ _ -> forM_ objMap draw
             {-
             GLSetSampler
             GLSaveImage
diff --git a/src/LambdaCube/GL/Input.hs b/src/LambdaCube/GL/Input.hs
--- a/src/LambdaCube/GL/Input.hs
+++ b/src/LambdaCube/GL/Input.hs
@@ -133,15 +133,14 @@
             Just ic <- readIORef $ glInput p
             case icSlotMapInputToPipeline ic ! slotIdx of
                 Nothing         -> do
-                    putStrLn $ " ** slot is not used!"
+                    --putStrLn $ " ** slot is not used!"
                     return V.empty   -- this slot is not used in that pipeline
                 Just pSlotIdx   -> do
-                    putStrLn "slot is used!" 
+                    --putStrLn "slot is used!" 
                     --where
                     let emptyV = V.replicate (V.length $ glPrograms p) []
                     return $ emptyV // [(prgIdx,createObjectCommands (glTexUnitMapping p) topUnis obj (glPrograms p ! prgIdx))| prgIdx <- glSlotPrograms p ! pSlotIdx]
     writeIORef cmdsRef cmds
-    sortSlotObjects input
     return obj
 
 removeObject :: GLStorage -> Object -> IO ()
@@ -154,7 +153,6 @@
 setObjectOrder p obj i = do
     writeIORef (objOrder obj) i
     modifyIORef (slotVector p ! objSlot obj) $ \(GLSlot objs sorted _) -> GLSlot objs sorted Reorder
-    sortSlotObjects p
 
 objectUniformSetter :: Object -> Map GLUniformName InputSetter
 objectUniformSetter = objUniSetter
