diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,13 @@
+# 0.10.3.0
+
+## Added features
+
+* Export generic classes (#585).
+
+## Bug fixes
+
+ * Fixed an issue where a WHERE clause would be dropped in the absence of a FROM (#695).
+
 # 0.10.2.0
 
 ## Added features
diff --git a/Database/Beam/Backend/SQL/Row.hs b/Database/Beam/Backend/SQL/Row.hs
--- a/Database/Beam/Backend/SQL/Row.hs
+++ b/Database/Beam/Backend/SQL/Row.hs
@@ -13,6 +13,9 @@
   , ColumnParseError(..), BeamRowReadError(..)
 
   , FromBackendRow(..)
+
+    -- * Exported so we can override defaults
+  , GFromBackendRow(..) -- for 'runSelectReturningList' and co
   ) where
 
 import           Database.Beam.Backend.SQL.Types
diff --git a/Database/Beam/Query/SQL92.hs b/Database/Beam/Query/SQL92.hs
--- a/Database/Beam/Query/SQL92.hs
+++ b/Database/Beam/Query/SQL92.hs
@@ -224,7 +224,7 @@
                -> Free (QF be db s) x
                -> SelectBuilder be db x
     buildQuery _ (Pure x) = SelectBuilderQ x emptyQb
-    buildQuery tblPfx (Free (QGuard _ next)) = buildQuery tblPfx next
+    buildQuery tblPfx f@(Free (QGuard _ _)) = buildJoinedQuery tblPfx f emptyQb
     buildQuery tblPfx f@(Free QAll {}) = buildJoinedQuery tblPfx f emptyQb
     buildQuery tblPfx f@(Free QArbitraryJoin {}) = buildJoinedQuery tblPfx f emptyQb
     buildQuery tblPfx f@(Free QTwoWayJoin {}) = buildJoinedQuery tblPfx f emptyQb
diff --git a/Database/Beam/Schema/Lenses.hs b/Database/Beam/Schema/Lenses.hs
--- a/Database/Beam/Schema/Lenses.hs
+++ b/Database/Beam/Schema/Lenses.hs
@@ -4,7 +4,12 @@
     ( tableLenses
     , TableLens(..)
 
-    , dbLenses ) where
+    , dbLenses
+
+    -- * Exported so we can override defaults
+    , GTableLenses(..)
+    , GDatabaseLenses(..)
+    ) where
 
 import Database.Beam.Schema.Tables
 
diff --git a/Database/Beam/Schema/Tables.hs b/Database/Beam/Schema/Tables.hs
--- a/Database/Beam/Schema/Tables.hs
+++ b/Database/Beam/Schema/Tables.hs
@@ -57,7 +57,20 @@
     , pk
     , allBeamValues, changeBeamRep
     , alongsideTable
-    , defaultFieldName )
+    , defaultFieldName
+
+    -- * Exported so we can override defaults
+    -- ** For 'Beamable'
+    , GZipTables(..)
+    , GTableSkeleton(..)
+    -- ** For 'Database'
+    , GZipDatabase(..)
+    -- ** For 'defaultDbSettings'
+    , GAutoDbSettings(..)
+    , GDefaultTableFieldSettings(..)
+    , ChooseSubTableStrategy
+    , SubTableStrategyImpl
+    )
     where
 
 import           Database.Beam.Backend.Types
diff --git a/beam-core.cabal b/beam-core.cabal
--- a/beam-core.cabal
+++ b/beam-core.cabal
@@ -2,7 +2,7 @@
 -- see http://haskell.org/cabal/users-guide/
 
 name:                beam-core
-version:             0.10.2.0
+version:             0.10.3.0
 synopsis:            Type-safe, feature-complete SQL query and manipulation interface for Haskell
 description:         Beam is a Haskell library for type-safe querying and manipulation of SQL databases.
                      Beam is modular and supports various backends. In order to use beam, you will need to use
diff --git a/test/Database/Beam/Test/SQL.hs b/test/Database/Beam/Test/SQL.hs
--- a/test/Database/Beam/Test/SQL.hs
+++ b/test/Database/Beam/Test/SQL.hs
@@ -12,7 +12,7 @@
 import Database.Beam
 import Database.Beam.Backend.SQL (MockSqlBackend)
 import Database.Beam.Backend.SQL.AST
-
+import Data.Kind (Type)
 import Data.Int
 import Data.Time.Clock
 import Data.Text (Text)
@@ -24,6 +24,7 @@
 tests = testGroup "SQL generation tests"
                   [ simpleSelect
                   , simpleWhere
+                  , simpleWhereNoFrom
                   , simpleJoin
                   , selfJoin
                   , leftJoin
@@ -117,6 +118,32 @@
          nameCond = ExpressionCompOp "==" Nothing (ExpressionFieldName (QualifiedField employees "first_name")) (ExpressionFieldName (QualifiedField employees "last_name"))
 
      selectWhere @?= Just (ExpressionBinOp "AND" salaryCond (ExpressionBinOp "AND" ageCond nameCond))
+
+-- | Simple select without FROM clause (#667)
+
+data EmptyDb (f :: Type -> Type) = EmptyDb
+
+simpleWhereNoFrom :: TestTree
+simpleWhereNoFrom =
+  testCase "WHERE clause not dropped if there is no FROM" $ do
+    SqlSelect Select { selectTable = SelectTable { .. }, .. } <- pure $ selectMock simple
+    
+    selectGrouping @?= Nothing
+    selectOrdering @?= []
+    selectLimit @?= Nothing
+    selectOffset @?= Nothing
+    selectHaving @?= Nothing
+    selectQuantifier @?= Nothing
+    -- Important point: no FROM clause, yet WHERE clause should still be here
+    selectFrom @?= Nothing
+    selectWhere @?= (Just (ExpressionValue (Value False)))
+  
+  where
+    simple :: Q (MockSqlBackend Command) EmptyDb s (QExpr (MockSqlBackend Command) s Bool)
+    simple = do
+      guard_ (val_ False)
+      pure (val_ True)
+
 
 -- | Ensure that multiple tables are correctly joined
 
