@Override
    public boolean add(Literal l) {
        if (!isDB(l))
            return super.add(l);

        Literal bl = contains(l);
        Statement stmt = null;
        try {
            if (bl != null) {
                if (isCreatedByJason(l.getPredicateIndicator())) {
                    // add only annots
                    if (l.hasSubsetAnnot(bl))
                        // the current bel bl already has l's annots
                        return false;
                    else {
                        // "import" annots from the new bel
                        bl.importAnnots(l);
                        
                        // check if it needs to be added in the percepts list
                        if (l.hasAnnot(TPercept)) {
                            percepts.add(bl);
                        }

                        // store bl annots
                        stmt = conn.createStatement();
                        stmt.executeUpdate("update "+getTableName(bl)+" set "+COL_ANNOT+" = '"+bl.getAnnots()+"' "+getWhere(l));
                        return true;
                    }
                }
            } else {
                // create insert command
                stmt = conn.createStatement();
                stmt.executeUpdate(getInsert(l));
                // add it in the percepts list
                if (l.hasAnnot(TPercept)) {
                    percepts.add(l);
                }
                return true;
            }
        } catch (SQLException e) {
            logger.log(Level.SEVERE, "SQL Error", e);
        } finally {
            try {
                if (stmt != null) stmt.close();
            } catch (Exception e) {
                logger.log(Level.WARNING, "SQL Error closing connection", e);                    
            }
        }
        return false;
    }