diff --git a/fc-solve/benchmarks/shlomif-core-i3-desktop-machine.txt b/fc-solve/benchmarks/shlomif-core-i3-desktop-machine.txt
index 801007a..834a48c 100644
--- a/fc-solve/benchmarks/shlomif-core-i3-desktop-machine.txt
+++ b/fc-solve/benchmarks/shlomif-core-i3-desktop-machine.txt
@@ -622,3 +622,36 @@ Reached Board No. 28000 at 1445877712.559667 (total_num_iters=8366251)
 Reached Board No. 32000 at 1445877713.790471 (total_num_iters=10253959)
 Finished at 1445877713.799795 (total_num_iters=11372658)
 </DUMP>
+
+---------------------------------------------------------
+
+ARGS="--worker-step 16 -l as" bash scripts/time-threads-num.bash 4 4 x Several Times
+commit FILL IN.
+(commit Date: Fri Oct 23 22:38:44 2015 +0300 )
+With Profile Guided Optimisation (PGO).
+../source/Tatzer -l ci7b --prefix=/home/shlomif/apps/fcs
+(With -flto and -fwhole-program).
+sudo_renice.
+-O3
+4.2.6-desktop-1.mga6
+gcc-4.9.3 (built from source).
+lib64google-perftools-devel-2.4-1.mga6
+
+8.782390832901s
+
+    Highlight: the removal of the fcs_is_parent checks in freecell.c because
+    they are already present in the positions_by_rank lookup.
+
+<DUMP>
+Started at 1447502060.551685
+Reached Board No. 4000 at 1447502061.641332 (total_num_iters=354611)
+Reached Board No. 8000 at 1447502062.785507 (total_num_iters=1046834)
+Reached Board No. 12000 at 1447502063.849207 (total_num_iters=3122483)
+Unsolved Board No. 11982 at 1447502064.039545
+Reached Board No. 16000 at 1447502064.994579 (total_num_iters=4553860)
+Reached Board No. 20000 at 1447502066.061696 (total_num_iters=5904102)
+Reached Board No. 24000 at 1447502067.100605 (total_num_iters=6965262)
+Reached Board No. 28000 at 1447502068.118999 (total_num_iters=8640730)
+Reached Board No. 32000 at 1447502069.323223 (total_num_iters=10893444)
+Finished at 1447502069.334076 (total_num_iters=11372658)
+</DUMP>
diff --git a/fc-solve/source/freecell.c b/fc-solve/source/freecell.c
index aecbe02..5e8ff02 100644
--- a/fc-solve/source/freecell.c
+++ b/fc-solve/source/freecell.c
@@ -445,7 +445,6 @@ DECLARE_MOVE_FUNCTION(fc_solve_sfs_move_freecell_cards_on_top_of_stacks)
                 const int dc = pos_idx_to_check[1];
 
                 const fcs_const_cards_column_t dest_col = fcs_state_get_col(state, ds);
-                const fcs_card_t dest_card = fcs_col_get_card(dest_col, dc);
 
                 const int dest_cards_num = fcs_col_len(dest_col);
                 /* Let's check if we can put it there */
@@ -457,14 +456,24 @@ DECLARE_MOVE_FUNCTION(fc_solve_sfs_move_freecell_cards_on_top_of_stacks)
                  * dest_cards_num - next_dc == 0 <= 0 so the other check
                  * cab be skipped.
                  * */
+
+                /*
+                 * We don't need this check because the positions_by_rank
+                 * already filters the fcs_is_parent_card check for us.
+                 * */
+#ifdef FCS_POS_BY_RANK__ENABLE_PARENT_CHECK
+                const fcs_card_t dest_card = fcs_col_get_card(dest_col, dc);
                 if ((dest_cards_num == next_dc) ||
                     (
                         (!fcs_is_parent_card(fcs_col_get_card(dest_col, next_dc), dest_card))
                         &&
-                        (dest_cards_num - next_dc <= num_vacant_slots)
+                        (dest_cards_num <= next_dc + num_vacant_slots)
 
                     )
                 )
+#else
+                if (dest_cards_num <= next_dc + num_vacant_slots)
+#endif
                 {
                     /* We can move it */
 
@@ -1203,11 +1212,16 @@ DECLARE_MOVE_FUNCTION(fc_solve_sfs_move_cards_to_a_different_parent)
 
                 fcs_cards_column_t dest_col = fcs_state_get_col(state, ds);
                 int dest_cards_num = fcs_col_len(dest_col);
-                fcs_card_t dest_card = fcs_col_get_card(dest_col, dc);
 
                 /* Corresponding cards - see if it is feasible to move
                    the source to the destination. */
 
+                /*
+                 * We don't need this check because the positions_by_rank
+                 * already filters the fcs_is_parent_card check for us.
+                 * */
+#ifdef FCS_POS_BY_RANK__ENABLE_PARENT_CHECK
+                fcs_card_t dest_card = fcs_col_get_card(dest_col, dc);
                 /* Don't move if there's a sequence of cards in the
                  * destination.
                  * */
@@ -1221,6 +1235,7 @@ DECLARE_MOVE_FUNCTION(fc_solve_sfs_move_cards_to_a_different_parent)
                 {
                     continue;
                 }
+#endif
 
                 int num_cards_to_relocate = dest_cards_num - dc - 1;
 
